我试图追加一个字符串。所以我从malloc
开始,然后追加该字符串。
char * loc,*X,*Y;
X = "4";
Y = "8";
loc = (char *)malloc(strlen(X)+strlen(Y)+6); //its +1 for the comma between, +1 for '\0' and +2 for "->" +2 for "()".
strcat(loc,"->");
strcat(loc,"(");
strcat(loc,X);
strcat(loc,",");
strcat(loc,Y);
strcat(loc,")");
printf("%s\n", loc);
所以,当我跑步时,我等着看:
- >(4,8)
相反,在字符串的开头有一个奇怪的字符,我看到了:
└->(4,8)
如果我在malloc
之后使用strcpy(loc,"")
清除字符串,那么它就不存在了。
为什么这个
└
出现在第一位?
答案 0 :(得分:4)
malloc
函数不会初始化它分配的内存。它的内容是不确定。因此,你不知道在哪里,甚至如果在那个记忆中有一个字符串终止符。
strcpy
函数并不关心现有内容,而是会写一个终结符。另一方面,strcat
函数依赖于查找字符串终止符以了解它应该从哪里开始写入,但正如我们已经建立的那样,内存中甚至可能没有终结符。
所以你有四个选择:
答案 1 :(得分:2)
就像现在一样,您的代码访问未初始化的内存,调用未定义的行为。该缓冲区中可能有任何。
您需要初始化内存。由于您将bugger视为C字符串,只需将第一个字节设置为NUL终止符\0
即可。
*loc = '\0';
现在你有一个长度为零的有效字符串。