【发布时间】:2019-07-07 15:43:06
【问题描述】:
不幸的是,此代码似乎在打印实际文本之前打印了一些内容。这是什么?为什么要打印?
"\300\367\277\357\376"
我在我的代码中更频繁地意识到这一点,我确信这意味着我做错了什么。
char* concat(const char *s1, const char *s2);
int main(int argv, char* args[]){
char lastchars[50];
char *buf;
while(1){
gets(lastchars);
if(strlen(lastchars) == 0)break;
buf = concat(buf, lastchars);
}
printf("%s",buf);
}
char* concat(const char *s1, const char *s2)
{
char *result = malloc(strlen(s1) + strlen(s2) + 1);
strcpy(result, s1);
strcat(result, s2);
return result;
}
【问题讨论】:
-
concat的定义是什么?另外,为什么不使用标准的strcat? -
你从未初始化
buf,所以你得到了未定义的行为。 -
另外,永远不要使用
gets! -
char *buf;之后 --buf指向什么有效内存? (提示:没有你拥有)