将 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 失败的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中使用 atoi 将 char 数组转换为 int 值

如何使用 atoi 分配 char 数组的各个元素?

将 atoi() 返回的 int 插入数组

将 char 数组转换为字节数组并再次返回

Atoi 返回值

如何将 String 转换为 char 数组?