从文件中读取某个字符串时程序执行中断
Posted
技术标签:
【中文标题】从文件中读取某个字符串时程序执行中断【英文标题】:Program execution interrupted when certain String is read from File 【发布时间】:2018-02-27 20:52:50 【问题描述】:我的代码有一个小问题,希望您能帮助我。 下面的程序读取写入 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;
【问题讨论】:
malloc(sizeof(char))
分配 1 字节,只够一个字符串终止符!建议char* target = malloc(strlen(source) + 1));
甚至char* target = strdup(source);
请阅读Why is the gets function so dangerous that it should not be used?
【参考方案1】:
在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
。
【讨论】:
char *target = strdup(source)
为您完成所有繁重的工作以上是关于从文件中读取某个字符串时程序执行中断的主要内容,如果未能解决你的问题,请参考以下文章