为在C中转换为字符串的int数组动态分配内存

时间:2018-06-12 16:30:34

标签: c arrays string segmentation-fault malloc

我有一个由以下内容动态分配的整数数组:

int *ranArr(int size) {
    int *arr= malloc(size *sizeof(int));

    for(int i = 0; i < size; i++) {
        arr[i] = genRan(size);
    }

    return arr;
}

我想为一个字符串动态分配内存,我会将整数数组转换成字符串并存储在字符串中:

        int *arrayCopy = ranArr(size);
        int arrayCopyLen = size;
        char *arrayString= (char*) malloc(size * sizeof(char));
        int index = 0;
        for(int i = 0; i< arrayCopyLen ; i++) {
            index += sprintf(&arrayString[index], "%d ,", arrayCopy[i]);
        }
        int arrayStringLen = strlen(arrayString)+1;

这适用于1000左右的数组大小,但是当我将大小设置为2000左右时,它会中断,我会遇到分段错误。

1 个答案:

答案 0 :(得分:2)

您没有为字符串分配足够的内存。

假设int为32位,将单个int转换为字符串最多占用12个字节。例如,将值-2000000000转换为字符串需要12个字符。因此,您的字符串至少需要12 * size个字节,加上", "个字符和空终止符的空间。

此外,根据定义,sizeof(char)为1,因此无需乘以。

char *arrayString = malloc(size * 14 + 1);   
// 14 = 12 bytes for a 32-bit int plus 2 bytes for ", "