我的代码有一个小问题,希望你能帮助我。 下面的程序读取以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;
}
答案 0 :(得分:0)
在getString
中,您没有为要复制的字符串分配足够的空间:
char* target = (char*) malloc(sizeof(char));
这只是为单个字符分配空间。你需要足够的字符串长度,再加上1个空终止字节:
char* target = malloc(sizeof(strlen(source) + 1);
你实际上可以通过调用strdup
来替换整个函数,它会做同样的事情。