当我连字符串时,为什么我会收到垃圾字符?

时间:2011-06-20 02:13:21

标签: c

这是我的代码

    char *c[strlen(a) + strlen(b) + 2];
    strcat(c, a);
    strcat(c, "+");
    strcat(c, b);

结果字符串c在开头有一些垃圾字符,后跟连接的字符串。我做错了什么?

5 个答案:

答案 0 :(得分:5)

应该是:

char *c = malloc (sizeof (char) * (strlen (a) + strlen (b) + 2));
c[0] = '\0';
strcat(c, a);
strcat(c, "+");
strcat(c, b);

你的日常生活失败的原因是因为你已经完成了:

char *c[strlen(a) + strlen (b) + 2];

c声明为指针数组,并且未使用'\0'初始化数组。它应该像

char c[strlen(a) + strlen (b) + 2];

您还必须使用空字符串初始化数组,因为strcat会在连接时找到'\0'

请注意,char *c[strlen(a) + strlen (b) + 2];中的错误执行没有问题,因为每个位置的长度都是4个字节,因此数组可以容纳其中的字符。但这不正确。

答案 1 :(得分:4)

如果您没有初始化c[0] = '\0';strcat会在插入'\0'之前寻找第一个c

答案 2 :(得分:2)

char c[strlen(a) + strlen(b) + 2];
snprintf(c, sizeof(c), "%s+%s", a, b);

答案 3 :(得分:1)

您正在声明一个指向char(char *)的指针数组。您需要声明一个char

的数组
char c[strlen(a) + strlen(b) + 2];
strcat(c, a);
strcat(c, "+");
strcat(c, b);

答案 4 :(得分:0)

你的垃圾字符来自c,你正在定义c,但是因为你没有对它们进行初始化而将它们放到某个垃圾值,将c的第一个字符指定为null,我认为应该解决你的问题.. < / p>