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