>我有一个字符串数组,我正在尝试为其中一个字符串分配更多空间,以便我可以更改字符串的值。
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 memoryn");
}
strcpy(new_string, arr[index1]);
strcat(new_string, arr[index2]);
arr[index1] = new_string;
}
但是,当我运行代码时,它适用于某些实例,但在其他情况下,它将在 index1 复制字符串并将其放在索引 1 + 1 处。
您的代码存在一些问题:
- 内存泄漏
arr[index1] = new_string
,因为您没有释放旧缓冲区。 - 如果结果字符串长度超过 1000 字节,则缓冲区溢出。
- 不从catenate_strings返回任何值,尽管函数具有返回值 int。
如果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 stringn");
return -1;
}
strcat(new_string, arr[index2]);
arr[index1] = new_string;
return 0;
}
index+1
的重复不是来自显示的代码,而是来自代码中的其他位置。