我正在阅读 C Primer Plus 第 5 版,我在 I/O 章节。我提出了一个示例(第 451 页),它做了一些事情,在某些时候它创建了一个新文件,该文件以现有文件命名,但以 .red 结尾。例如,如果我有这个文件“test”,程序会创建一个“test.red”。看不懂下面的。。
char name[LEN];
//some code...
strncpy(name,argv[1], LEN - 5);
name[LEN - 5] = '\0';
strcat(name,".red");
我查看了命令 strcpy 的定义。它将 arv[1](它包含源文件)中的前 LEN-5 个字符复制到名称中。strcat 命令将 .red 添加到末尾。但是,我无法理解 this 的存在name[LEN - 5] = '\0';
。我删除了它,程序仍然运行良好。
编辑
我为这些行发表了书中的评论..
为了构造输出文件的新名称,程序使用 strncpy() 将名称 eddy 复制到数组名称中。LEN - 5 参数为 .red 后缀和最后的空字符留出了空间。如果 argv[2] 字符串长于 LEN – 5,则不会复制空字符,因此程序会添加空字符以防万一。当 strcat() 函数附加该字符串时,在 strncpy() 调用之后 name 中的第一个空字符被 .red 中的句点覆盖,在这种情况下产生 eddy.red。