将字符串解析为int数组 - 获取警告"从整数中生成指针而不使用强制转换"

时间:2018-03-20 14:34:45

标签: c pointers casting int atoi

我需要创建一个函数,它接受一串数字将它解析为一个单独的int数组,但是我很难这样做。保存数组的结构设置如下:

typedef struct intArray {
    int *numbers;
}

让我们说我需要解析的字符串命名为numString并且等于" 8162"。 我已经为结构(这个实例名为newIntArray)和它所拥有的数字子进行了malloced。我还创建了一个名为i的int。这是我目前的代码:

for (i = 0; i < 4; i++) {
    newIntArray->numbers[i] = atoi(numString[i]);
    i++;
}

当我尝试这个时,我得到一个警告,即我在没有强制转换的情况下从整数制作指针。我知道我做错了什么?

编辑:

这是我现在拥有的整个功能:

Int40 *stringToIntArray(char *numString) {
    int i = 0;
    struct intArray *newIntArray = malloc(sizeof(struct intArray));
    newIntArray->numbers = malloc(40 * sizeof(int));
    if (newIntArray == NULL || numString == NULL) {
        return NULL;
    }
    for (i = 0; i < 4; i++) {
        newIntArray->numbers[i] = atoi(numString[i]);
        i++;
    }
    return newIntArray;
}

1 个答案:

答案 0 :(得分:0)

atoi函数需要一个字符串,即指向字符串的char *作为其参数。您传递的内容是numString[i],这是一个char。这就是错误的来源。

由于您想要转换单个数字,您可以从每个字符中减去'0'。由于0-9的字符具有连续的字符编码,因此会将数字字符转换为等效数字。例如,'5' - '0'会产生5

newIntArray->numbers[i] = numString[i] - '0';