将 char 数组转换为 atoi 失败
Posted
技术标签:
【中文标题】将 char 数组转换为 atoi 失败【英文标题】:Converting char array to atoi is failing 【发布时间】:2016-05-30 21:13:41 【问题描述】:我查看了与该主题相关的其他帖子,并使用atoi
函数转换字符串,但值始终为0。
这是存储在hold4
中的值:
char hold4[4] = "0", "." , "1", "5", "\0");
然后我尝试转换为int
,然后我得到了
int hm = atoi(hold4);
hm
打印为:
hm = 0
我希望 hm
为 0.15,因为这是 hold4
中的值。我想将此值用于后续数学运算。
这是我的代码:
int x = 0;
int pixel = 0;
char hold[10];
char hold4[4];
for(x=0; x < linesCount; x++)
fscanf(model, "%c", &hold[x]);
if(hold[x] == '\0' || hold[x] == '\r' || hold[x] == '\n')
hold4[0] = hold[x-4];
hold4[1] = hold[x-3];
hold4[2] = hold[x-2];
hold4[3] = hold[x-1];
hold4[4] = '\0';
// printf("new line: break\n");
//printf("pixel: %c\n", hold[x]);
int hm = atoi(hold4);
printf("\nhold4: %d\n", hm);
我该如何进行这项工作?
【问题讨论】:
您没有注意到您将 5 个值放入一个声明为仅包含 4 个的数组中吗? 您的代码应该生成大量编译器警告,以便将指针转换为char
。您尝试使用初始化程序将char *
存储到您的char
中!编译器警告/错误不仅仅是为了好玩!
【参考方案1】:
您缺少整数的全部意义。整数是整数 (1, 2, 3, 4...),不能有小数点。您正在寻找的是 float/double。
Try with this: atof()
【讨论】:
谢谢,完美运行。与此同时,我遇到了麻烦,只用 1 和 5 将其转换为 atoi,然后用该数字除以 100 得到 0.15 浮点数。但是 atof 正是我想要的。谢谢 我很高兴能帮上忙。只需接受我或 Michaels 的回答,以便问题得到解答以供将来参考。【参考方案2】:atoi
函数将“字符数组”转换为“整数”,因此名称为:(a)array (to) (i)nt。
您的字符数组有小数位,但atoi
只会转换 0-9 范围内的字符;它不会返回浮点值。
请注意,您的变量 hm
明确地是 int
类型,并且您使用 %d
打印值,也明确地使用 int
。您已经完成了确保唯一可能是 int
值所需的一切。
【讨论】:
谢谢,明白了!【参考方案3】:char hold4[5] = '0', '.' , '1', '5', '\0';
double a = atof(hold4);
printf("%f",a);
试试这个
【讨论】:
以上是关于将 char 数组转换为 atoi 失败的主要内容,如果未能解决你的问题,请参考以下文章