c - printf 在 malloc 之后打印一个奇怪的字符

标签 c

<分区>

我正在尝试追加一个字符串。所以我从 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,"") 清理字符串,它就不存在了。 这是为什么

出现在第一位??

最佳答案

malloc函数不会初始化它分配的内存。其内容不确定。因此,您不知道在哪里,甚至是否该内存中有字符串终止符。

strcpy 函数不关心已有的内容,会写一个终止符。另一方面,strcat 函数依赖于找到一个字符串终止符来知道它应该从哪里开始写入,但正如我们已经确定的那样,内存中甚至可能没有终止符。

所以你有四个选择:

  1. 使用 strcpy作为第一个电话,而不是 strcat .

  2. 将第一个元素显式设置为终止符,如 loc[0] = '\0'

  3. 使用 calloc它将内存初始化为零,恰好与字符串终止符相同。

  4. 使用 snprintf相反。

我推荐选择四。

关于c - printf 在 malloc 之后打印一个奇怪的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42889419/

相关文章:

c - 按回车键在多个显示记录格式之间切换

c - C程序读取文件中的无效指针

c++ - ##家庭是什么意思

c - 整数列表的C语言ADT实现

c - 在 C 中访问动态数组的部分?

c - 我的主 while 循环将运行,并在用户输入 'y' 或 'n' 时再次运行。不管用户怎么说

C语言——使用文件IO、结构体、函数、数组、指针在文本文件中记录数据(添加、删除)

c - 使用 gets() 将字符串保存到结构中?

c - main通常是一个函数?

c - 使用 strtok、malloc 和 realloc 从字符串创建一个标记数组