传递'atoi'的参数1使得整数指针没有强制转换......任何身体都可以帮助我

时间:2014-09-24 18:49:02

标签: c

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char c;
    int count = 0;
    c=fgetc(file);
    while  (c != '\n' )
    {
        instruction_file[count] = atoi(c);
        c = fgetc(file);
        count++;
    }
}

错误消息是

warning: passing argument 1 of 'atoi' makes pointer from integer without a cast
/usr/include/stdlib.h 147, expected const char* but argument of type char

5 个答案:

答案 0 :(得分:5)

您似乎正在尝试使用atoi来解析单位数字。但是,由于atoi需要C字符串并且需要const char*,因此您无法将其传递给普通char。你需要传递一个正确终止的C字符串:

char c[2] = {0};
c[0]=fgetc(file);
instruction_file[count] = atoi(c); // This will compile

然而,这不是将数字解释为数值的最有效方式:您可以通过从数字中减去0来更快地做同样的事情:

char c;
...
instruction_file[count] = c - '0';

答案 1 :(得分:1)

atoi需要输入char *。您传递的是char,这正是警告消息告诉您的内容。如果您确定只需要文件中的单个字符,请将c的声明更改为char c[2];,并在c[1]='\0';行之后添加c=fgetc(file);

答案 2 :(得分:0)

如果要转换整数值中的数字字符(数字),可以使用ASCII代码偏移量:

int main()
{

    char c = '1';

    int i = c - '0'; // ASCII code offset
}

答案 3 :(得分:0)

c - &#39; 0&#39;

atoi需要char指针(字符串或char数组),但是你传递了int

答案 4 :(得分:0)

通过给予&#39; c&#39;作为atoi的参数,你传递一个整数值(c的ascii值为99),但函数atoi想要一个空终止的字符数组(字符串),正好是一个地址,因为它接受一个指针变量作为它的参数。