将 char 数组转换为 atoi 失败

Converting char array to atoi is failing

我查看了与此主题相关的其他帖子,并使用 atoi 函数转换字符串,但值始终为 0。

这是存储在 hold4 中的值:

char hold4[4] = { "0", "." , "1", "5", "[=10=]");

然后我尝试转换为 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] == '[=13=]' || 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] = '[=13=]'; 
    //  printf("new line: break\n");
    }
    //printf("pixel: %c\n", hold[x]);
}

int hm = atoi(hold4);

printf("\nhold4: %d\n", hm);

我该如何进行这项工作?

atoi 函数将 "array of chars" 转换为 "integer",因此得名:(a)rray (to) (i)nt.

您的字符数组有小数位,但atoi只会转换0-9范围内的字符;它不会 return 浮点值。

请注意,您的变量 hm 明确是 int 类型,并且您使用 %d 打印值,也明确 int。您已经完成了确保唯一的可能性是 int 值所需的一切。

你漏掉了整点整数。整数是一个整数(1、2、3、4...),不能有小数点。您要找的是 float/double.

Try with this: atof()

char hold4[5] = { '0', '.' , '1', '5', '[=10=]'};
double a = atof(hold4);
printf("%f",a);

试试这个