gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:25:39 25 4
gpt4 key购买 nike

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

效果很好,但在所有 [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 所需的 \0 的评论。

使用 char str[3] 而不是 uint16_t 可以消除问题并正确转换所有数字。

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

关于c - 数组某些部分的 atoi() 输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58549568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com