Я хочу создать связанный список, который содержит имена из файла input.txt.Имя и фамилия отделяются пробелом, а после фамилии - разрыв строки.
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
typedef struct node{
char* firstname;
char* lastname;
struct node *next;
}node;
node *add(node *head, char* fnme, char* lnme){
node *new_node;
new_node = (node*)malloc(sizeof(node));
if(new_node == NULL)
printf("Fehler bei Speicher reservierung...");
new_node->firstname = (char*)malloc(100*sizeof(char));
if(new_node->firstname == NULL)
printf("Fehler bei Speicher reservierung...");
new_node->lastname = (char*)malloc(100*sizeof(char));
if(new_node->lastname == NULL)
printf("Fehler bei Speicher reservierung...");
strcpy(new_node->firstname, fnme);
strcpy(new_node->lastname, lnme);
if(head == NULL){
head = new_node;
head->next = NULL;
return head;
}
node *current;
current = head;
while(current->next != NULL){
current = current->next;
}
current->next = new_node;
new_node->next = NULL;
return head;
}
void print(node *head){
node *current;
current = head;
while(current != NULL){
printf("%s %s\n", current->firstname, current->lastname);
current = current->next;
}
}
int main(){
node *head = NULL;
char character;
FILE *fp;
fp = fopen("input.txt", "r");
while ((character = fgetc(fp)) != EOF) {
char *fnme, *lnme;
fnme = (char*)malloc(100 * sizeof(char));
if(fnme == NULL)
printf("Fehler bei Speicher reservierung...");
lnme = (char*)malloc(100 * sizeof(char));
if(lnme == NULL)
printf("Fehler bei Speicher reservierung...");
int i = 0;
while (character != ' ') {
fnme[i++] = character;
character = fgetc(fp);
}
fnme[++i] = '\0'; // NULL-terminate
i = 0;
while (character != '\n') {
lnme[i++] = character;
character = fgetc(fp);
}
lnme[++i] = '\0'; // NULL-terminate
head = add(head, fnme, lnme);
free(fnme);
free(lnme);
}
print(head);
return 0;
}
Я никогда не работал с strcat, почему-то это не работает.Я также попытался использовать массивы вместо указателей, но результат тот же.Может быть, мне нужно использовать другие функции?
Обновление 1:
Каким-то образом вывод выглядит странно, кажется, что он никогда не идет в блоке if в функции add ().Вывод с 2 именами в .txt-файл: pt?пт?Питер Паркер Кларк Кент
Обновление 2:
Изменен тип возврата функции add (), теперь она работает:)