テキストファイルを読み取り、すべての行をchar配列に入れ、その行をリンクリストノードに格納するCプログラムに取り組んでいます。リンク リストを作成するプロセスは機能しているようですが、リンク リストに保存されているテキストを母音なしで出力するはずの関数を呼び出すと (理由は聞かないでください!)、セグメンテーション エラーが発生します。 ...母音なしですべてのテキストを印刷した後。
LinkedList ノードは次のようになります。
typedef struct linked_list_node link;
struct linked_list_node {
char* word;
link* next;
};
母音なし関数は次のようになります。
void print_no_vowels(link* lines)
{
char vowels[] = "aeiouy";
unsigned int i = 0;
unsigned int j = 0;
unsigned int check = 0;
link* first = lines;
while(first != NULL)
{
printf("%p\n", first);
for(i = 0; i < strlen(first->word)-1; i++)
{
for(j = 0; j < strlen(vowels)-1; j++)
{
if(first->word[i] == vowels[j])
{
check = 1;
}
}
if(check != 1)
{
printf("%c", first->word[i]);
} else {
check = 0;
}
}
printf("\n");
first = first->next;
}
}
多くの printf-ing の後、最初のポインターが NULL を指す必要がある後でも、プログラムが再び print_no_vowels 関数で while ループに入るという結論に達しました。なぜこれが起こるのか分かりません - 同じ方法を使用してリンクされたリストを反復処理する他のすべての関数では、プログラムは最初の == NULL のときに再び while ループに入りません。
どんな助けでも大歓迎です、事前に感謝します!
編集:
これは、リンクされたリストの init 関数です。
link* read_file(FILE *input)
{
char line[100];
link *first = malloc(sizeof(link));
first->word = NULL;
link *curr = NULL;
while(fgets(line, 100, input) != NULL)
{
if(first->word == NULL)
{
first->word = malloc(100);
strcpy(first->word, line);
first->next = malloc(sizeof(link));
curr = first->next;
}
else
{
if(line != NULL)
{
curr->word = malloc(100);
strcpy(curr->word, line);
curr->next = malloc(sizeof(link));
curr = curr->next;
}
}
}
return first;
}
あなたがそう言う前に -- 私は C の初心者であることを知っています。