我有一个字符串数组,我正在尝试为其中一个字符串malloc更多空间,以便我可以更改字符串的值。
int catenate_strings (char** arr, int index1, int index2) {
char *new_string;
new_string = malloc(1000*sizeof(char));
if (new_string == NULL) {
printf("\nError allocating memory\n");
}
strcpy(new_string, arr[index1]);
strcat(new_string, arr[index2]);
arr[index1] = new_string;
}
然而,当我运行我的代码时,它将适用于某些实例,但在其他实例中,它将在index1处复制字符串并将其放在index1 + 1处。
答案 0 :(得分:1)
您的代码存在一些问题:
arr[index1] = new_string
中的内存泄漏,因为您没有释放旧缓冲区。如果arr
中的所有条目都是使用malloc
分配的,那么您可以使用realloc
。
int catenate_strings (char** arr, int index1, int index2)
{
// Resize buffer to hold old string + new string (+ terminating null byte!)
char * const new_string = realloc(strlen(arr[index1]) + strlen(arr[index2]) + 1);
if (new_string == NULL) {
printf("\nError allocating Memory, cannot resize string\n");
return -1;
}
strcat(new_string, arr[index2]);
arr[index1] = new_string;
return 0;
}
index+1
的复制不是来自显示的代码,而是来自代码中的其他位置。