![](/img/trans.png)
[英]warning: assignment makes pointer from integer without a cast [enabled by default]
[英]C : warning: assignment makes pointer from integer without a cast [enabled by default]
這是我的代碼
#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," ");
}
}
}
這是我得到的警告。
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 <string.h>
以獲取strtok()
的原型。
您的編譯器(如在C99 C之前)假定strtok()
因為這個而返回一個int
。 但是不提供函數聲明/原型在現代C中是無效的(自C99起)。
在C中使用了一個舊規則,它允許隱式函數聲明。 但是自C99以來, 隱式int規則已從C語言中刪除。
請參閱: C函數調用:了解“隱式int”規則
strtok()
是<string.h>
原型,你需要包含它。
否則,由於缺少前向聲明,您的編譯器會假定用於其未知簽名的任何函數,返回一個int
並接受任意數量的參數。 這被稱為隱式聲明 。
FWIW,隱式函數聲明現在根據最新標准無效。 引用C11
,Foreward,“第二版的主要變化包括:”
- 刪除隱式函數聲明
你需要包含string.h
#include <string.h>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.