入力ファイルを取り込んでそれから文字列を抽出してリンクリストに追加するプログラムがあります。私はリンクされたリストに文字列を正しく追加しているとは思わないし、正しい方法を見つけることができない。プログラムが実行されると何らかの理由で無限ループに入ります。リンクリストに文字列を挿入しようとすると正しく動作しない
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct list {
char *string;
struct list *next;
};
typedef struct list LIST;
int main() {
FILE *fp;
char line[128];
char file_name[20];
LIST *current, *head;
char *p, *s;
head = current = NULL;
printf ("Enter the name of the file: ");
scanf("%s",file_name);
fp = fopen(file_name, "r");
while(fgets(line, sizeof(line), fp))
{
p = s = line;
while(*p!=0)
{
if (*p==' ')
{
LIST *node = malloc(sizeof(LIST));
*p = 0;
node->string = strdup(s);
node->next =NULL;
if(head == NULL){
current = head = node;
} else {
current = current->next = node;
}
s = p+1;
}
p++;
}
}
fclose(fp);
//test print
for(current = head; current ; current=current->next){
printf(" %s", current->string);
}
return 0;
}
あなたはそれによって 'リンパ節転移> next'は'ノードに等しいループを作成し、ライン内のすべての単語に同じノードを使用しています'。新しい単語を挿入するときは新しいノードを作成し、新しい単語を読み込んだときは作成しないでください。 –
デバッガを1行ずつ実行しているときに何を学習しますか? –
@MOehmありがとうございます。上記のコードを変更して、単語を挿入するときに新しいノードが作成されるようにしました。無限ループの問題が修正されました。最後のものを除くテキストファイルのすべての単語が出力されるようになりました。リンクされたリストにファイルの最後の単語が保存されない理由を知っていますか? –