[英]Parsing std input into a linked list using scanf
我想用3個半冒號(例如:test1:127:completed)分隔的std輸入並將其放入包含3個屬性的鏈表的節點中。 當我運行此命令時,它會出現段錯誤,是否在96行中不適當地使用scanf?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUFFERSIZE 1024
//for the linked list
struct node{
char *fileName;
int *lineNumber;
char *filler;
struct node *next;
};
int main (int argc, char *argv[])
{
//Create the linked list of the file location and the line number
char tmpstring[BUFFERSIZE];
/* This won't change, or we would lose the list in memory */
struct node *head = NULL;
//tail
struct node *tail = NULL;
/* This will point to each node as it traverses the list */
struct node *ptr;
//new node pointer
struct node *newnode;
while (fgets(tmpstring, 128, stdin) == tmpstring)
{
newnode->next = NULL;
// First insertion is a special case.
if (tail == NULL)
head = tail = newnode;
else {
tail->next = newnode;
tail = newnode;
}
} // while
for (ptr = head; ptr != NULL; ptr = ptr->next)
//THIS IS THE PROBLEM scanf(" %s:%d:%s", ptr -> fileName, ptr -> lineNumber, ptr -> filler);
printf("%s", ptr->fileName);
//get how many nodes are in the linked list
struct node *tmp = head;
int count = 0;
while(tmp!=NULL)
{
count++;
tmp = tmp->next;
}
//end list creation
//getGrepOutput();
printf("%d\n", count);
}
//new code added
ptr -> fileName = (char*) malloc(50);
ptr -> lineNumber = (int*) malloc(50);
ptr -> filler = (char*) malloc(50);
scanf(" %s:%d:%s", ptr -> fileName, ptr -> lineNumber, ptr -> filler);
您需要為ptr -> fileName
分配內存,這只是程序中的懸掛指針。 同為lineNumber
和filler
的成員。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.