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

mrb*_*rns 2 c

这是我的代码

    char *c[strlen(a) + strlen(b) + 2];
    strcat(c, a);
    strcat(c, "+");
    strcat(c, b);
Run Code Online (Sandbox Code Playgroud)

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

pho*_*xis 5

它应该是:

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

你日常生活失败的原因是因为你做了:

char *c[strlen(a) + strlen (b) + 2];
Run Code Online (Sandbox Code Playgroud)

它声明c为一个指针数组,也没有用a初始化数组'\0'.应该是这样的

char c[strlen(a) + strlen (b) + 2];
Run Code Online (Sandbox Code Playgroud)

您还必须使用空字符串初始化数组,就像在连接时strcat找到的那样'\0'.

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

  • 正确的声明,但第一个strcat仍然会有问题. (2认同)