我在tutorialspoint中遇到了下面这个使用memset的例子:
#include <stdio.h>
#include <string.h>
int main(){
char src[40];
char dest[100];
memset(dest, '\0', sizeof(dest));
strcpy(src, "This is tutorialspoint.com");
strcpy(dest, src);
printf("Final copied string : %s\n", dest);
return(0);
}
我不明白为什么要使用 memset 行,因为注释该行时编译和结果是相同的。我想问一下,那条线是必须的吗?或者在执行 strcpy() 时这样做是一种好习惯吗?或者它只是一根随机线。
谢谢!
最佳答案
在这种情况下不需要它,因为它对输出没有影响。在一些类似的情况下可能需要它。
char dest[100];
这将 dest
定义为 100 个 char
的本地数组。它的初始值是垃圾。它可以写成:
char dest[100] = "";
或
char dest[100] = { 0 };
但这些都不是必需的,因为 dest
在使用之前已分配了一个值。
strcpy(src, "This is tutorialspoint.com");
strcpy(dest, src);
这会将包含在 src
中的字符串复制到数组 dest
中。它复制 "This is tutorialspoint.com"
的 26 个字符加上 1 个附加字符,终止符 '\0;
标记字符串的结尾。 dest
数组的先前内容将被忽略。 (如果我们使用 strcat()
,这很重要,因为 strcat()
之前必须在目标中找到 '\0'
它可以开始复制。)
如果没有 memset()
调用,dest
的剩余 73 个字节将是垃圾——但这无关紧要,因为我们从不查看超出'\0'
位于 dest[26]
。
如果出于某种原因,我们决定添加如下内容:
printf("dest[99] = '%c'\n", dest[99]);
程序,那么 memset()
就很重要了。但是由于 dest
的目的是保存一个 string(根据定义,它由一个 '\0'
空字符终止),那将这不是明智之举。完全合法,但不明智。
关于c - 在玩具示例中使用 '\0' 进行 memset 的必要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36901038/