C:警告:赋值从整数中生成没有强制转换的指针
这是我的代码
#include #include void main() { FILE *fp; char * word; char line[255]; fp=fopen("input.txt","r"); while(fgets(line,255,fp)){ word=strtok(line," "); while(word){ printf("%s",word); word=strtok(NULL," "); } } }
这是我得到的警告。
token.c:10:7: warning: assignment makes pointer from integer without a cast [enabled by default] word=strtok(line," "); ^ token.c:13:8: warning: assignment makes pointer from integer without a cast [enabled by default] word=strtok(NULL," "); ^
这个word
被声明为char*
。 那为什么会出现这种警告呢?
包括#include
以获取strtok()
的原型。
你的编译器(比如在C99 C之前)假设strtok()
因为这个而返回一个int
。 但不提供函数声明/原型在现代C中无效(自C99起)。
在C中使用了一个旧规则,它允许隐式函数声明。 但是自C99以来, 隐式int规则已从C语言中删除。
请参阅: C函数调用:了解“隐式int”规则
strtok()
是
原型,你需要包含它。
否则,由于缺少前向声明,您的编译器会假定用于其未知签名的任何函数,返回一个int
并接受任意数量的参数。 这被称为隐式声明 。
FWIW,隐式函数声明现在根据最新标准无效。 引用C11
,Foreward,“第二版的重大变化包括:”
- 删除隐式函数声明
你需要包含string.h
#include