C 通过'的参数1;atoi&x27;从不带强制转换的整数生成指针…;有人能帮我吗
C 通过'的参数1;atoi&x27;从不带强制转换的整数生成指针…;有人能帮我吗,c,C,atoi要求输入一个char*。您正在向它传递一个字符,这正是警告消息告诉您的。如果确定只需要文件中的单个字符,请将c的声明更改为char c[2]并添加c[1]='\0'行后c=fgetc(文件)看起来您正试图使用atoi解析单个数字。但是,由于atoi需要一个C字符串并接受一个const char*,因此不能向其传递一个普通的char。您需要向其传递一个正确终止的C字符串: warning: passing argument 1 of 'atoi' makes pointer from in
atoi
要求输入一个char*
。您正在向它传递一个字符
,这正是警告消息告诉您的。如果确定只需要文件中的单个字符,请将c
的声明更改为char c[2]代码>并添加c[1]='\0'代码>行后c=fgetc(文件)
看起来您正试图使用atoi
解析单个数字。但是,由于atoi
需要一个C字符串并接受一个const char*
,因此不能向其传递一个普通的char
。您需要向其传递一个正确终止的C字符串:
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
但是,这并不是将数字解释为数值的最有效方法:通过从数字中减去0
,可以更快地完成相同的操作:
char c[2] = {0};
c[0]=fgetc(file);
instruction_file[count] = atoi(c); // This will compile
如果要将数字字符(数字)转换为整数值,可以使用ASCII码偏移量:
char c;
...
instruction_file[count] = c - '0';
c-‘0’
atoi需要字符指针(字符串或字符数组),但通过将“c”作为参数传递给atoi,您传递的是整型值(c的ascii值为99),但函数atoi需要以null结尾的字符数组(字符串),正是一个地址,因为它接受指针变量作为其参数。查看atoi
的预期参数类型您还没有告诉我们指令文件是什么。另外,您是从文本文件还是二进制文件读取数据?atoi的参数是地址,因此您可以使用--atoi(&c)@阿披实:这还不够atoi
要求其参数指向以零结尾的字符串。仅仅传递单个char
变量的地址是不正确的。@JohnBode:肯定是:-)。@user3386109 Righto:在点击提交之前需要多加注意。我想现在已经修复了。是的,好多了:)我删除了评论,因为没有人能看到编辑。虽然减法字符的概念不是很直观,但这是一种方法。“其他任何事情都只是浪费时间。”斯特凡我完全同意。我包含了atoi
修复程序,以防OP在其程序的后续版本中希望切换到多位数。对于多位数,逐字读取是不明智的;-)但我明白你的意思。
char c;
...
instruction_file[count] = c - '0';
int main()
{
char c = '1';
int i = c - '0'; // ASCII code offset
}