簡體   English   中英

C:警告:賦值使得整數指針沒有強制轉換[默認啟用]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM