#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
答案 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想要一个空终止的字符数组(字符串),正好是一个地址,因为它接受一个指针变量作为它的参数。