c-使用malloc函数后,printf下一行中的随机字母



我正试图在C中创建一个function,它将string与先前声明的string pointer连接起来。例如,它从Test+Word生成TestWord。不知怎的,当我printf时,结果是两个单词成功地连接在一起,但在下一行我得到了很多KKKKKKKKKKKKK字母。

这就是功能:

char* hozzafuz(char* elso_tag, char string[]){
char *ptr = (char*)malloc( (strlen(elso_tag) + strlen(string) + 1) * sizeof(char));
for(int i=0; i<strlen(elso_tag); i++){
ptr[i]=elso_tag[i];
}
int index = 0;
for(int i=strlen(elso_tag); i<(strlen(elso_tag) + strlen(string)); i++){
ptr[i]=string[index++];
}
ptr[strlen(elso_tag) + strlen(string)] = 'n';
free(elso_tag);
return ptr;
}

我做过类似的函数,但它们都有相同的问题。我认为内存分配有问题。

c中的字符串由字符终止,您需要手动设置它。

根据描述,我不确定您是否打算在连接字符串的末尾使用n(换行符(。如果没有,则需要将n分配替换为:

ptr[strlen(elso_tag) + strlen(string)] = '';

如果你确实需要它,你需要分配一个额外的字符,并为最后一个字符分配一个

char* hozzafuz(char* elso_tag, char string[]){
char *ptr = (char*)malloc( (strlen(elso_tag) + strlen(string) + 2) * sizeof(char));
/* Note the extra character ------------------------------------^ */
for(int i=0; i<strlen(elso_tag); i++){
ptr[i]=elso_tag[i];
}
int index = 0;
for(int i=strlen(elso_tag); i<(strlen(elso_tag) + strlen(string)); i++){
ptr[i]=string[index++];
}
ptr[strlen(elso_tag) + strlen(string)] = 'n';
ptr[strlen(elso_tag) + strlen(string) + 1] = '';
free(elso_tag);
return ptr;
}

最新更新