看看这段代码有什么错!急!
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char *str[8] = { "one ", "two ", "three ", "four ",
"five ", "six ", "seven ", "eight "};
char *concat = 0;
int total_size = 0;
int i = 0;
for (i = 0; i < 8; i++)
total_size += strlen(str[i]);
concat = (char*) malloc(total_size);
for (i = 0; i < 8; i++) {
strcat(concat, str[i]);
// free(str[i]);
}
printf( "%s\n ", concat);
free(concat);
return 0;
}
[解决办法]
至少这里长度少了一个字节:
concat = (char*) malloc(total_size);
应该是:
concat = (char*) malloc(total_size + 1);
因为字符串结束符需要一个字节的空间。
[解决办法]
就是那个 '\0 '
[解决办法]
哦,还有一处。
既然使用字符串连接函数strcat,那么应该从空串开始进行连接,而你的concat刚分配时,其指向的内容未初始化,是随机的,将导致很奇怪的结果。
解决办法是分配空间后立即把它初始化成一个容串就可以了:
concat = (char*) malloc(total_size + 1);
concat[0] = '0 ';
//或者:*concat = '\0 ';
//或者:strcpy(concat, " ");
//或者先:strcpy(concat, str[0]),然后从str[1]开始strcat;
//或者使用calloc,而不是malloc分配空间,那样空间会被自动初始化成全0,即相当于一个空串。
[解决办法]
哦,你已经发现了,呵呵。
[解决办法]
没有“各位”吧,好像就咱们俩。:D
[解决办法]
路过接分
[解决办法]
碰巧路过,嘿嘿!