数组某些部分的 atoi() 输出错误

Wrong atoi() output in some parts of an array

我正在读取输入文件并将其写入二维整数数组。文件中的所有数字都是两个字符。

它运行良好,但在所有 [48]–[57] 元素中,整数都有一个冗余数字(例如,30、871、447 而不是 3、87、44)。 strtol() 也有同样的问题。输入文件的十六进制代码在那些部分看起来完全正常。

for (int a = 0; a < d; a++)
{
    for (int b = 0; b < d; b++)
    {
        //read two chars
        uint16_t num;
        fread(&num, sizeof(char) * 2, 1, inptr);

        //convert to int and put to the array (it makes wrong int in 48 <= b <= 57)
        arr[a][b] = atoi((char*)&num);

        //skip space or line break in the input file
        fseek(inptr, sizeof(char), SEEK_CUR);
    }
}

有什么问题吗?为什么只有 [48]–[57] 工作不正确?

感谢所有评论,尤其是那些提到 atoi 所需的 [=11=] 的评论。

使用 char str[3] 而不是 uint16_t 可以解决问题并让我们正确转换所有数字。

for (int a = 0; a < d; a++)
{
    for (int b = 0; b < d; b++)
    { 
        char str[3];
        str[2] = '[=10=]';
        fread(&str, 2, 1, inptr);
        arr[a][b] = atoi(str);
        fseek(inptr, 1, SEEK_CUR);
    }
}