打印出一个char []

时间:2012-03-08 13:27:30

标签: 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, "Cannot open.\n");
      exit(1);
   }

   read(fd, memory, count);

   //printf the buffered memory contents

   return 0;
}

6 个答案:

答案 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)

  1. 将最后一个字符设置为内存中的\0
  2. 使用printf()
  3. 或者读取一个字符,因为最后一个字符需要设置为\0

答案 5 :(得分:-1)

如果文件是文本文件,只需使用printf:

printf(memory);

你必须将null终止缓冲区。