gpt4 book ai didi

c - 从文件中读取行

转载 作者:太空狗 更新时间:2023-10-29 16:10:39 24 4
gpt4 key购买 nike

我正在尝试将字符串和整数从一个简单的文本文件读取到我的数组中。但问题是我在列表中间的一行中得到了一些随机字符。它可能与换行符问题有关,但我不确定。文本文件如下所示:

4
Mr Tambourine Man
Bob Dylan
1965
Dead Ringer for Love
Meat Loaf
1981
Euphoria
Loreen
2012
Love Me Now
John Legend
2016

第一个数字 (4) 表示列表中有多少首歌曲。我制作了一个结构,它可以保存歌曲并为每个指针动态分配内存。结构:

typedef struct Song {
char *song;
char *artist;
int *year;
} Song;

分配:

Song *arr;
arr = (Song*)malloc(sizeof(Song));

功能:

int loadFile(char fileName[], Song *arr, int nrOf) {

FILE *input = fopen(fileName, "r");

if (input == NULL) {
printf("Error, the file could not load!\n");
} else {
int i = 0;
fscanf(input, "%d\n", &nrOf);

for (int i = 0; i < nrOf; i++) {
arr[i].song = (char*)malloc(sizeof(char));
arr[i].artist = (char*)malloc(sizeof(char));
arr[i].year = (int*)malloc(sizeof(int));
fgets(arr[i].song, 100, input);
fgets(arr[i].artist, 100, input);
fscanf(input, "%d\n", arr[i].year);
}
printf("The file is now ready.\n");
fclose(input);
}

return nrOf;
}

你能找到问题所在吗?或者你有更好的解决方案吗?

最佳答案

这是错误的:

arr[i].song = (char*)malloc(sizeof(char));
arr[i].artist = (char*)malloc(sizeof(char));

您只分配大小为 1 的缓冲区,没有缩放。当您通过向缓冲区加载超出其容量的数据而使缓冲区溢出时,这会给您带来未定义的行为。

我希望那些人阅读:

arr[i].song = malloc(100);

等等。请注意,不需要转换,sizeof (char) 始终为 1。

另外,这个:

arr[i].year = (int*)malloc(sizeof(int));

super 奇怪。绝对没有理由动态分配单个整数,只需将该字段设为 int 并将值直接存储在那里即可。

关于c - 从文件中读取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42159232/

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