我不能为我的生活记住如何做到这一点。该程序打开一个文件,然后读取该文件。我想要做的就是打印刚读过的内容。
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;
}
答案 0 :(得分:8)
printf
接受%s
格式以打印C字符串。但是,默认情况下,它要求字符串具有null-terminator(0x0 ASCII码)。如果您确定通过调用read
读取了它,那么您可以执行此操作:
printf("%s\n", memory);
然而,你无法确定。因为您甚至不检查读取了多少字节...或错误代码。 所以你必须先修复你的代码。
完成检查错误并知道读取了多少字节后,您可以执行以下操作:
printf("%.*s\n", (int)bytes_that_were_read, memory);
祝你好运!
答案 1 :(得分:1)
您是否因某种原因坚持printf()
?如果文件是二进制文件,而'\0'
位于某处,该怎么办?这将打破printf("%.*s", ...)
。如果您使用read()
阅读,则可以使用write()
:
while (bytes_written < bytes_read)
{
ssize_t x = write(STDOUT_FILENO,
memory + bytes_written,
bytes_read - bytes_written);
if (-1 == x)
{
exit(1);
}
bytes_written += x;
}
答案 2 :(得分:0)
您可以使用for循环和printf("%c", buffer[i])
一次打印一个字符,或者如果缓冲区是以空字符结尾的字符串,则可以使用printf("%s", buffer)
。
答案 3 :(得分:0)
for (unsigned int i = 0; i < count; i++) {
printf("%c", memory[i]);
}
答案 4 :(得分:0)
\0
或者读取一个字符,因为最后一个字符需要设置为\0
答案 5 :(得分:-1)
如果文件是文本文件,只需使用printf:
printf(memory);
你必须将null终止缓冲区。