写入文件

Lip*_*eka 0 c linux file

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

我有这个程序:

char buf[20];
size_t nbytes;

strcpy(buf, "All that glitters is not gold\n");
fd= open("test_file.txt",O_WRONLY);
write(fd,buf,strlen(buf));
close(fd);
Run Code Online (Sandbox Code Playgroud)

令我感到困惑的是,当我test_file.txt在运行此程序后打开文件时,我看到一些字符,如^C^@^@^@^^^@"所有闪闪发光的不是"之后的行:注意,buf的一部分未写入,而是出现了这些字符.为什么会这样?

Mat*_*Mat 6

你在那个缓冲区写了超过19个字符.完成后,程序的行为是不确定的.它可以做任何想做的事情.

分配足够大的缓冲区.0如果你需要能够将它作为C字符串处理,它必须能够适合所有字母和终止.


asv*_*kau 5

该字符串"All that glitters is not gold\n"超过20个字符.我建议你尝试使用更大的缓冲区.

实际上,如果你要在CI做任何重要的工作,建议你永远不要使用strcpy,作为一般习惯.使用这样的函数strncpy可以让你指定一个缓冲区大小,这样就可以清楚地看到你永远不会溢出.