关于文件写入,我有一个非常简单的问题.
我有这个程序:
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的一部分未写入,而是出现了这些字符.为什么会这样?
你在那个缓冲区写了超过19个字符.完成后,程序的行为是不确定的.它可以做任何想做的事情.
分配足够大的缓冲区.0如果你需要能够将它作为C字符串处理,它必须能够适合所有字母和终止.
该字符串"All that glitters is not gold\n"超过20个字符.我建议你尝试使用更大的缓冲区.
实际上,如果你要在CI做任何重要的工作,建议你永远不要使用strcpy,作为一般习惯.使用这样的函数strncpy可以让你指定一个缓冲区大小,这样就可以清楚地看到你永远不会溢出.