C语言 当我在字符串数组中为字符串分配更多空间时,字符串数组会复制一些字符串



>我有一个字符串数组,我正在尝试为其中一个字符串分配更多空间,以便我可以更改字符串的值。

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 处。

您的代码存在一些问题:

  1. 内存泄漏arr[index1] = new_string,因为您没有释放旧缓冲区。
  2. 如果结果字符串长度超过 1000 字节,则缓冲区溢出。
  3. 不从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的重复不是来自显示的代码,而是来自代码中的其他位置。

相关内容

  • 没有找到相关文章

最新更新