C:警告:赋值使得整数指针没有强制转换[默认启用]

jop*_*hab 4 c strtok

这是我的代码

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

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," ");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的警告.

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," ");
        ^
Run Code Online (Sandbox Code Playgroud)

word声明为char*.那为什么会出现这个警告呢?

P.P*_*.P. 10

包括#include <string.h>获取原型strtok().

您的编译器(如在C99 C之前)假定strtok()返回一个int因为这个.但是不提供函数声明/原型在现代C中是无效的(自C99起).

在C中使用了一个旧规则,它允许隐式函数声明.但是自C99以来,隐式int规则已从C语言中删除.

请参阅:C函数调用:了解"隐式int"规则