我正在阅读C primer Plus第5版,我在I/O章节中。我想出了一个例子(第451页),它做了一些事情,并在某种程度上创建了一个新文件,该文件以现有文件命名,但以.red结尾。例如,如果我有这个文件“测试”,程序会创建一个“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添加到最后。但是,我不明白这个name[LEN - 5] = '\0';
的存在。我删除它,程序仍然运行良好。
编辑
我张贴评论从书中的这些行..
要输出文件构建新的名称,该程序使用 函数strncpy()涡流副本的名称为数组名。 LEN - 5 为.red后缀和最终的空字符留下了空间。 如果argv [2]字符串长于LEN,则不会复制空字符,因此程序会添加空字符以防万一。当strcat()函数追加字符串 (在本例中为eddy.red)时,在strred()调用后名称中的第一个空字符 然后在.red中被 句点覆盖。
明白了!谢谢! – yaylitzis