【问题标题】:Dynamically allocate memory for an int array converted to string in C为在 C 中转换为字符串的 int 数组动态分配内存
【发布时间】:2018-06-12 16:30:33
【问题描述】:

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

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 左右时,它会中断,并且出现分段错误。

【问题讨论】:

  • 什么是arrString?它没有在你的代码中定义
  • genRan 是什么?
  • @EugeneSh。该函数接受一个整数作为参数(typeof size)并返回一个整数(typeof arr[i])。这个函数计算对问题不重要的东西。函数名称暗示了一些随机数生成,但这是一个猜测。
  • @harper 是正确的,它只是生成一个从 0 到 size 的随机数。
  • @ChrisTurner 刚刚创建了一个类型,在编辑中更正了它!

标签: c arrays string segmentation-fault malloc


【解决方案1】:

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

假设 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 ", "

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 2017-03-28
    • 2018-06-16
    • 2016-11-14
    • 2013-06-07
    • 1970-01-01
    相关资源
    最近更新 更多