C从文本文件中读取单词

时间:2014-11-21 18:02:52

标签: c file hash io

我正在编写一个简单的函数,它将输入3作为输入3已经打开FILES,然后扫描文件中的每个字符,填充一个char数组,直到找到'空格或找到换行符。但是,我填充数组的方法一直给我一个Segmentation fault,我不确定为什么。现在我只是试图打印来控制单词[]数组中填充的单词,然后用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);
}

3 个答案:

答案 0 :(得分:1)

你的word数组是一个指针数组,而不是一个字符数组 你应该改变

char* word[200];

char word[200];

*word[i];

word[i];

答案 1 :(得分:0)

您将word声明为字符指针的数组,为它们指定字符,并尝试取消引用这些值。

答案 2 :(得分:-1)

变量&#34; word&#34;因为你声明它不是char数组/ cstring,但它是一个指向大小为200的字符串的指针;这可以工作,但你没有使用&#34; malloc&#34;初始化字符串。因此&#34;分段错误&#34;您尝试更改未分配给程序的内存部分时出错。

编辑:此外,作为提示,始终在创建时始终初始化指针;因为它们在创建时指向内存的随机部分,所以代码可能并不总能给你一个&#34;分段错误&#34;错误,因为它可能指向分配给您的程序的内存的一部分。 最糟糕的情况是,你将有一个非常难以追踪的错误。