実装しようとしているコードは、.txt ファイルを読み取り、文字列をノードに変換するメソッドです。基本的に、.txt ファイルを読んでいるときは、最初に文字以外をチェックします (単語は数字で始めることも、単語のインデックスに英数字以外を含めることもできません)。最初の文字が見つかると、プログラムはループを終了し、スペースが見つかるまでループする別の文字に入ります。単語の作成に成功したら (スペースが見つかったときに単語が「終了」します)、リンクされたリストにその単語を入力します。
これを実行すると、Bus Error: 10 が発生します。これは word[b] 配列が原因だと思っていましたが、malloc しても同じエラーが発生します。
前もって感謝します!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define TRUE 1
#define FALSE 0
struct Node{
char value[100];
int numOccur;
int numVariance;
struct Node *next;
};
void testprint(struct Node * head){
int data;
data = head->value;
strcpy(data,head->value);
while(head != NULL){
printf("%s\n", data);
head = head->next;
}
}
int main()
{
struct Node *curr;
struct Node *n;
struct Node *head =0;
struct Node *tail =0;
struct Node *next;
char word[100];
int a;
int x;
FILE *file1;
file1 = fopen("test1.txt", "r"); //opens text file
if(file1 == NULL){
fprintf(stderr,"Error: Could not open file"); //if file1 has error, returns error message
exit(1);
}
a = fgetc(file1);
int b = 0;
while(a != EOF){
while(!isalpha(a)){
a = fgetc(file1);
continue;
}
n = (struct Node *) malloc( sizeof( struct Node));
while(isalnum(a)){
while( a != ' ' && a != EOF){
word[b] = a;
a = fgetc(file1);
b++;
}
word[b] = '\0';
}
n->next = 0;
if(head == 0){
head = n;
tail = n;
}
else{
tail->next = n;
tail = n;
}
}
testprint(head);
fclose(file1);
}