c-用与其他文件相同的名称命名一个文件

  • 本文关键字:文件 一个 其他 c strncpy
  • 更新时间 :
  • 英文 :


我正在阅读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] = '';
strcat(name,".red");

我查看了命令strcpy的定义。它将arv[1](包含源文件)中的第一个LEN-5字符复制到名称中。strcat命令将.red添加到末尾。然而,我无法理解这个name[LEN - 5] = '';的存在。我删除了它,程序仍然运行良好
编辑
我发布了书中对这些行的评论。。

要为输出文件构造新名称,程序使用strncpy()将名称eddy复制到数组名称中。LEN-5参数为.red后缀和最后一个null字符留出了空间。如果argv[2]字符串比LEN长,则不会复制任何空字符5,所以程序添加了一个空字符以防万一。第一个nullstrncpy()调用后名称中的字符将被当strcat()函数将该字符串附加到.red中时,在这种情况下,产生eddy.red。

在C语言中,字符串只是字符数组。要知道字符串的结束位置,在最后一个字符后面添加一个"\0"字符(字符代码为零的字符,在ASCII字母表中称为NUL字符)。

strncpy最多复制其第三个参数给定的字符数,并且不能保证复制会以NUL终止。在设计strncpy的时候,存储比现在更为有限,甚至一个字节也很重要。因为如果知道某个字符串的最大值是14个字符,就可以存储一个14个字符的字符串,而不使用终止NUL字符。

因此,当使用strncpy时,如果字符串副本要用于其他C函数,如strcat,则需要添加缺失的NUL字符,在strncpy没有复制的情况下。

无论如何,如果从一开始就有一个NUL字符在那个地方,它可能会起作用,但这不是你所依赖的,或者编译器会帮助你。

相关内容

  • 没有找到相关文章

最新更新