gpt4 book ai didi

c - 从文件读取特定字符串时程序执行中断

转载 作者:行者123 更新时间:2023-11-30 16:35:12 24 4
gpt4 key购买 nike

我的代码有一个小问题,希望你能帮助我。下面的程序读取 txt 文件中写入的名称,并将它们存储在链接列表中,然后在命令行上将它们打印出来。

该列表包含以下名称:

Gustav Mahler
Frederic Chopin
Ludwig van Beethoven
Johann-Wolfgang Von-Goethe

但是当我运行程序时,程序的执行在打印列表之前或之后被中断。

如果我删除最后一行,它可以正常工作,但是当我将其添加回列表中或将其替换为随机组合(例如“jlajfi3jrpiök+kvöaj3jiijm.--aerjj”)时,它会再次停止。

有人可以向我解释一下为什么程序执行被中断吗?

提前谢谢您! :)

这是程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct list {
char* name;
struct list *next;
}NODE;

char * getString(char *source);

int main() {

FILE *fpointer = NULL;
char filename[100];

puts("\nEnter the name of the file:\n");
gets(filename);

if((fpointer = fopen(filename, "r")) == NULL ) {
printf("\nThe file you have chosen is not valid.\n");
return 1;
}

char buffer[200];
NODE *head = NULL;
NODE *current = NULL;


while(fgets(buffer, 200, fpointer) != NULL) {

NODE *node = (NODE *) malloc(sizeof(NODE));
node -> next = NULL;

node -> name = getString(buffer);


if(head == NULL) {
head = node;
} else {
current -> next = node;
}

current = node;

}

current = head;
while(current) {
printf("%s", current -> name);
current = current -> next;
}


return 0;
}


char * getString(char* source) {
char* target = (char*) malloc(sizeof(char));
strcpy(target, source);
return target;
}

最佳答案

getString 中,您没有为要复制的字符串分配足够的空间:

char* target = (char*) malloc(sizeof(char));

这只是为单个字符分配空间。您需要足够的字符串长度,再加上 1 个空终止字节:

char* target = malloc(sizeof(strlen(source) + 1);

实际上,您可以通过调用 strdup 来替换整个函数,这会执行相同的操作。

此外,don't cast the return value of malloc ,和never use gets .

关于c - 从文件读取特定字符串时程序执行中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49017763/

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