Здесь я пытаюсь прочитать содержимое файла построчно и создать структуру для каждой строки. Проблема в том, что когда я печатаю список слов, каждое из них является последним словом в файле (которое в этом примере}). Я считаю, что поскольку строка часто изменяется, и я передаю указатель на символ, значение каждой структуры также изменяется. Я пытался решить эту проблему в течение почти дня без какой-либо удачи. Какой хороший способ прочитать каждое слово в структуре и связать каждую структуру со связанным списком?
Обратите внимание, что есть несколько вспомогательных методов, используемых ниже. Я проверял их несколько раз, и они работают.
Структура токена
typedef struct token
{
char* value;
struct token* next;
}TOKEN;
Содержимое файла
target1:
dependency1
{
command1,
command2
}
Main
TOKEN *head = NULL;
// represents each formatted line from the script file
char* line = malloc(161*sizeof(char));
FILE* fileRead = openFile("RawRules.txt", "r");
while((line = readLine(line, fileRead)) != NULL)
{
head = add(head, line);
}
displaylist(head);
freeNodes(head);
fclose(fileRead);
Добавить функцию Изменено с http://cprogramminglanguage.net/singly-linked-list-c-source-code.aspx
TOKEN* add(TOKEN *head, char* value){
TOKEN *tmp;
if(head == NULL){
head=(TOKEN *)malloc(sizeof(TOKEN));
if(head == NULL){
printf("Error! memory is not available\n");
exit(0);
}
head-> value = value;
head-> next = head;
}else{
tmp = head;
while (tmp-> next != head)
tmp = tmp-> next;
tmp-> next = (TOKEN *)malloc(sizeof(TOKEN));
if(tmp -> next == NULL)
{
printf("Error! memory is not available\n");
exit(0);
}
tmp = tmp-> next;
tmp-> value = value;
tmp-> next = head;
}
return head;
}
функция чтения строки
// reads a line of a file into buffer
char* readLine(char* buffer, FILE* file) {
buffer = fgets(buffer, 161, file);
return buffer;
}
Это также не решило проблему
while(true)
{
char* ll = malloc(161*sizeof(char));
ll = readLine(ll, fileRead);
f(ll != NULL)
head = add(head, ll);
else
break;
}
Извините, я программировал на C, как миллиард лет назад, поэтому назовите меня нубом!