我試圖通過流的內容循環來動態生成列表中的節點,給出了我讀取的每一行的內容。我有如下定義的結構:無法指定字符指針循環中的結構
struct info {
char *mystring;
char *file;
int line_no;
struct info *next;
};
我用這個循環通過流迭代:
while(1) {
char t [KMAX];
char* file;
char* line_no;
char* text;
if (fgets(t, KMAX, file_pipe) != NULL) {
file = strtok (t, delimiter);
line_no = strtok(NULL, delimiter);
int line = atoi(line_no);
text = strtok(NULL, delimiter);
add(&head, text, line, file);
}
我知道變量正確傳遞給我的附加功能,因爲我打印出來每次我都可以驗證它。但是,當我嘗試打印列表時出現問題。它只是打印文本和文件名的最後一行,但整數值相應地改變。我的猜測是它與數組被刪除有關,並且每次都在同一塊內存中被重新創建,所以指針每次都會改變。
我不確定正確的方法是去解決這個問題。我是否以某種方式修改我的while循環並以不同的方式使用char指針,或者我應該改變結構以保存變量,而不是僅僅使用指針?我會很感激任何反饋!
編輯:添加更多的代碼
void add(struct info **x, char * text, int line_no, char * file) {
struct info* current = *x;
struct info* newInfo;
newInfo = malloc(sizeof(struct info));
(*newInfo).next = NULL;
(*newInfo).grepstring = text;
(*newInfo).line_no = line_no;
(*newInfo).file = file;
if (current == NULL) { //indicates the head is null, special case
*x = newInfo;
} else {
//get to the end of the list
while ((*current).next != NULL) {
current = (*current).next;
}
//apends node to the end of the list
(*current).next = newInfo;
}
}
錯誤必須在添加或打印列表中的代碼。你可以請他們發表。 – 2012-02-03 02:36:21
爲了能夠確定問題的原因,我們需要查看您提及的打印電話的確切位置。 也是迂腐,我會建議在每次調用後檢查strtok返回null,這將意味着字符串t null終止字符已被發現 – Lefteris 2012-02-03 02:40:14
那麼,它是什麼? '結構信息'或'結構說'? – 2012-02-03 02:56:25