这是我的代码
char *c[strlen(a) + strlen(b) + 2];
strcat(c, a);
strcat(c, "+");
strcat(c, b);
结果字符串c在开头有一些垃圾字符,后跟连接的字符串。我做错了什么?
答案 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>