当我为一个字符串数组中的字符串malloc更多空间时,字符串数组会复制一些字符串

时间:2016-01-21 08:23:15

标签: c arrays string malloc strcpy

我有一个字符串数组,我正在尝试为其中一个字符串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处。

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题:

  1. arr[index1] = new_string中的内存泄漏,因为您没有释放旧缓冲区。
  2. 如果结果字符串超过1000个字节,则缓冲区溢出。
  3. 尽管函数具有返回值int,但未从catenate_strings返回任何值。
  4. 如果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的复制不是来自显示的代码,而是来自代码中的其他位置。