我試圖實現的代碼是讀取.txt文件並將字符串轉換爲節點的方法。基本上,當我讀取.txt文件時,首先檢查非字母(單詞不能以數字開頭,單詞的任何索引中也不能有非字母數字)。一旦找到第一個字母,程序退出循環並進入另一個循環,直到看到一個空格。當我成功發表一個單詞時(當發現有空格時,單詞「結束」),我將該單詞輸入到鏈接列表中。總線錯誤:10從C中輸入文本從.txt文件到節點
當我運行這個,我得到一個總線錯誤:10.我認爲這將是由於單詞[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);
}
你的代碼甚至沒有編譯。有很多錯誤。當期望Node *時,您可以使用FILE *調用testprint()。此外,當您執行word [b] =(char *)malloc(sizeof(char)* 30)時,數據類型不匹配。您正在分配一個動態字符數組(lhs)並將其分配給char(rhs)。 – Barney 2013-02-15 04:25:26
在這段代碼中錯誤的東西中,'/ 0'不是終止的空字符; '\ 0'是。事實上,爲了避免*再次出現問題,請不要使用* *。改用'0'。另外,當你到達你的第一個單詞時,你的意圖是分配一個新的30字符緩衝區*爲永遠的字符*?似乎有點矯枉過正,不是嗎?特別是考慮到你將配置保存在一個無效的內存區域(類型錯誤)並且在過程中像篩子一樣泄漏。把這個[codereview.stackexchange.com](http://codereview.stackexchange.com)並修復* real *問題。 – WhozCraig 2013-02-15 04:28:31