我正在编写一个简单的函数,它将输入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);
}
答案 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;错误,因为它可能指向分配给您的程序的内存的一部分。 最糟糕的情况是,你将有一个非常难以追踪的错误。