簡體   English   中英

C從文本文件中讀取單詞

[英]C Reading words from text file

我正在編寫一個簡單的函數,將已經打開的3個文件作為輸入3,然后掃描文件中的每個字符,填充一個char數組,直到到達''空格或找到換行符為止。 但是,我填充數組的方法一直給我一個Segmentation fault ,我不確定為什么。 現在,我只是試圖打印來控制台word []數組中填充的單詞,然后使用memset清除下一個單詞。

hash_table_t training(FILE *D1, FILE *D2, FILE *D3, int size)
{

char *word[200];
char c;
int i = 0;

while ((c = fgetc(D1)) != EOF)
{
    while (((c>='a') && (c<='z')) || ((c>='A') && (c<='Z')))
    {
        //add to char array
        *word[i++] = c;
    }
    if(c == ' ' || c=='\n')
    {
        //hash word (print chars for now)
        for (i=0; *word[i] != ' '; i++)
        {
            printf("%c", *word[i]);
        }

    }
    memset (word, ' ', 20);

}

fclose(D1);
fclose(D2);
fclose(D3);
}

您的word數組是指針數組,而不是字符數組。
你應該改變

char* word[200];

char word[200];

*word[i];

word[i];

您將word聲明為字符指針數組,為它們分配字符 ,然后嘗試取消引用這些值。

正如您所聲明的,變量“ word”不是char數組/ cstring,而是指向大小為200的字符串的指針。 這將起作用,但是您尚未使用“ malloc”初始化字符串,因此在嘗試更改未分配給程序的部分內存時出現“ Segmentation Fault”錯誤。

編輯:另外,作為一個提示,總是在創建后立即初始化指針; 因為它們在創建時指向內存的隨機部分,所以代碼可能不會總是給您“ Segmentation Fault”錯誤,因為它可能指向分配給程序的部分內存。 最壞的情況是,您將遇到一個很難跟蹤的錯誤。

暫無
暫無

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

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