簡體   English   中英

當我的文件指針不為空時,fscanf正在返回分段錯誤

[英]fscanf is returning segmentation fault while my file pointer is not null

我被困在這里一個小時。 當文件指針不為空時,不知道為什么我會出現分段錯誤。 任何人都幫助我。

int load(char* dictionary){
char* word = "";
FILE* fp=fopen(dictionary,"r");
if ( fp!= NULL )
{
    while (fscanf(fp,"%s",word) != EOF) // **getting segmentation fault**
    {
        hash_put(word);
    }
}
else
{
        return false;
}
fclose(fp);
return true;}

您還有什么期望? 不允許寫入字符串文字的只讀存儲器。

你應該分配一些讀/寫內存...例如malloc (不要忘記在最后free ),或者在堆棧char data[1024];

問題不在於文件指針; 問題是你的word變量。

您已將word設置為指向字符串文字"" ),該字符串只有0終結符的空間。 嘗試修改字符串文字的內容會調用未定義的行為。 這個,以及你將要存儲的東西超過文字的末尾,這就是你的代碼崩潰的原因。

數組不會增長以容納額外的數據。 在嘗試讀取數據之前,必須分配足夠的內存來存儲數據。

#define WORD_SIZE ... // large enough to hold the largest word in your file
char word[WORD_SIZE];
...
while ( fgets( word, sizeof word, fp ) )
{
  // do stuff with word
}

為什么不嘗試給word一些內存來存儲這些數據呢?

即陣列 - 試試

 char data[100];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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