我在C中有一个函数,我试图从两个不同的位置(未知的大小,可能是安静的大)获取字符串,并将它们组合成一个字符串并返回它们.如果我只打印两个字符串然后我得到正确的结果,但是当我尝试使用strcat组合字符串时,我最终得到5个垃圾字符,然后是组合字符串的结果.
有人对我做错了什么有一些建议吗?以下是一些示例代码,用于演示我正在做的事情:
static int get_information(char** results)
{
size_t s1_length;
size_t s2_length;
/* DEBUGGING - Prints the correct string */
printf(get_string_1());
printf(get_string_2());
printf("\n");
/* Allocate memory for new string */
s1_length = strlen(get_string_1());
s2_length = strlen(get_string_2());
*results = malloc(sizeof(char) * (dir_length + file_length));
if(results == NULL)
return -1;
/* Combine the strings */
strcat(*results, get_string_1());
strcat(*results, get_string_2());
/* DEBUGGING - prints 5 garbage characters then the correct string */
printf(*results);
printf("\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
fre*_*ace 11
strcat需要在目标中找到空终止符.你*result指向未初始化的内存,恰好有5个字符的空终结符.
*result[0]='\0';在组合字符串之前添加应该修复它.
此外,您没有为null终止符分配足够的空间*result.
你为什么strcat第一个字符串?只需复制它.否则它将附加到未初始化的内存中的任何垃圾......
/* Combine the strings */
strcpy(*results, get_string_1());
strcat(*results, get_string_2());
Run Code Online (Sandbox Code Playgroud)