gpt4 book ai didi

c - 从 .txt 文件中读取名称并将其添加到链接列表中

转载 作者:行者123 更新时间:2023-11-30 16:27:19 25 4
gpt4 key购买 nike

我想创建一个链接列表,其中包含 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:

不知何故,输出很奇怪,似乎它永远不会出现在 add() 函数的 if block 中。.txt 文件中包含 2 个名称的输出:
点?点?
彼得·帕克
克拉克·肯特

更新 2:

更改了 add() 函数的返回类型,现在可以使用了

最佳答案

稍微修改一下你的代码,它应该可以工作。您不能以这种方式使用 strcat,因为 strcat 的第二个参数接受 const char *,并且您有 char code>,所以你的代码将无法编译。

这里值得注意的是:我假设函数 add 将为 fnmeanme 进行深度复制,否则,你不能简单地在这里释放他们。

while ((character = fgetc(fp)) != EOF) {
char *fnme, *anme;
fnme = malloc(100 * sizeof(char));
anme = malloc(100 * sizeof(char));

int i = 0;
while (character != ' ') {
fnme[i++] = character;
character = fgetc(fp);
}
fnme[++i] = '\0'; // NULL-terminate

i = 0;
while (character != '\n') {
anme[i++] = character;
character = fgetc(fp);
}
anme[++i] = '\0'; // NULL-terminate

add(head, fnme, anme); // Assume 'add' will make deep copy of both fname and
// anme, otherwise you cannot free them here.
free(fnme);
free(anme);

}

关于c - 从 .txt 文件中读取名称并将其添加到链接列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52775878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com