This is my code
#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," ");
}
}
}
This the warning I get.
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," ");
^
The word
is declared as char*
. Then why this warning arises?
Include
#include <string.h>
to get the prototype forstrtok()
.Your compiler (like in pre-C99 C) assumed
strtok()
returns anint
because of that. But not providing function declaration/prototype is not valid in modern C (since C99).There used an old rule in C which allowed implicit function declarations. But implicit int rule has been removed from C language since C99.
See: C function calls: Understanding the "implicit int" rule