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
  • 使用printf()

  • 或者少读一个字符,因为最后一个字符需要设置为
    \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?