c-写入文件

  • 本文关键字:文件 linux file
  • 更新时间 :
  • 英文 :


关于文件写入,我有一个非常简单的问题。

我有这个程序:

char buf[20];
size_t nbytes;
strcpy(buf, "All that glitters is not goldn");
fd= open("test_file.txt",O_WRONLY);
write(fd,buf,strlen(buf));
close(fd);

令人困惑的是,当我在运行该程序后打开文件test_file.txt时,我在"所有闪光的都不是"一行后面看到了一些像^C^@^@^@^^^@这样的字符:请注意,buf的一部分没有被写入,而是出现了这些字符。为什么会这样?

您在该缓冲区中写入了超过19个字符。一旦你做到了,你的程序的行为是未定义的。它可以随心所欲。

分配足够大的缓冲区。如果你需要把它当作一个C字符串,它必须能够容纳所有的字母加上一个终止的0

字符串"All that glitters is not goldn"的长度超过20个字符。我建议你用更大的缓冲区试试。

事实上,如果你打算用C语言做任何不平凡的工作,我建议你永远不要把strcpy作为一种普遍的习惯。使用像strncpy这样的函数,它允许您指定缓冲区大小,这样就不会溢出。

libgcc strcpy手册说:

如果strcpy()不够大(是的,如果程序员很愚蠢或懒惰,并且未能检查大小在复制之前),那么任何东西都可能发生溢流固定长度琴弦是最受欢迎的爆竹技巧

strlen还说

strlen()函数计算字符串的长度s,而不是包括终止的"\0"性格

所以我猜strlen ()不会返回您期望的结果,因此额外的字符被写入

为了使它正常工作,您需要分配一个足够大的缓冲区,它可以容纳整个字符串。

相关内容

  • 没有找到相关文章