C 打印出字符[]
我一辈子都记不起该怎么做了。该程序打开一个文件,然后读取该文件。我希望它能做的就是把刚读到的内容打印出来C 打印出字符[],c,C,我一辈子都记不起该怎么做了。该程序打开一个文件,然后读取该文件。我希望它能做的就是把刚读到的内容打印出来 int main(int argc, char *argv[]) { char memory[1000]; //declare memory buffer size int fd = 0; int count = 1000; if ((fd = open(argv[1], O_RDONLY)) == -1) { fprintf(stderr, "
int main(int argc, char *argv[])
{
char memory[1000]; //declare memory buffer size
int fd = 0;
int count = 1000;
if ((fd = open(argv[1], O_RDONLY)) == -1)
{
fprintf(stderr, "Cannot open.\n");
exit(1);
}
read(fd, memory, count);
//printf the buffered memory contents
return 0;
}
您可以使用for循环和
printf(“%c”,buffer[i])
一次打印一个字符,或者如果缓冲区是以null结尾的字符串,则可以使用printf(“%s”,buffer)
。printf
接受%s
格式打印c字符串。但是,默认情况下,它要求该字符串具有(0x0 ASCII代码)。如果您确定它是通过调用read
读取的,则可以执行以下操作:
printf("%s\n", memory);
printf("%.*s\n", (int)bytes_that_were_read, memory);
然而,你不能确定。因为你甚至不检查读取了多少字节。。。或查找错误代码。
因此,您必须首先修复代码
检查错误并知道读取了多少字节后,可以执行以下操作:
printf("%s\n", memory);
printf("%.*s\n", (int)bytes_that_were_read, memory);
祝你好运 for(无符号整数i=0;ifor (unsigned int i = 0; i < count; i++) {
printf("%c", memory[i]);
}
printf(“%c”,内存[i]);
}
\0
或者少读一个字符,因为最后一个字符需要设置为
\0
如果文件是文本文件,只需使用printf:
printf(memory);
但是,您必须使用null终止缓冲区。出于某种原因,您必须坚持使用
printf()
?如果该文件是二进制文件,内部某处有'\0'
,该怎么办?这将实现盈亏平衡printf(“%s.”,…)
。如果您使用read()
进行阅读,您应该能够使用write()
进行写作:
while(写入字节数<读取字节数)
{
ssize_t x=写入(标准输出文件号,
内存+写入的字节数,
字节(读取-字节(写入);
如果(-1==x)
{
出口(1);
}
写入的字节数+=x;
}
是不是printf(“%s\n”)
?@hmjd:对。更正。谢谢大家!@否:是的,但是只要您有正确的字节数,“%.*s”格式就可以执行此任务。请记住,printf()
与一起使用“%.*s\n”
将停止用于未终止的字符串,但如果缓冲区中有“\0”字符,则printf()
也将在该点停止(这可能是您想要的,也可能不是您想要的)。小心!不要打印没有格式说明符的未知数据。想象文件内容是I'm EVIL%s%s%s!
-您得到的不是文件数据,而是垃圾输出或分段错误。为什么是“unsigned”int?