我正在研究读取文本文件的函数。函数应该找出文本文件有多少条记录和 malloc
结构体数组。它必须是结构数组,因为它是在我的作业中指定的。 LineCounter
保存数组应该有多大的值。它的值为 17,这是正确的,但是当我 malloc
时数组的大小只有 4
结构。我正在用 C 编程,我还包括 <stdlib.h>
但编译器仍然强制我转换 malloc。
// SEPARATE HEADER FILE
#pragma once
#define FILECITATEL "citatel.txt" // textovy subor obsahujuci zoznam citatelov
typedef struct Citatel {
int id; // id cislo citatela
char meno[20]; // meno citatela
char priezvisko[30]; // priezvisko citatela
};
Citatel *getReaders();
void printReaders(Citatel *listOfReaders);
// END OF HEADER FILE
Citatel *getReaders() {
FILE *fileRead;
fileRead = fopen(FILECITATEL, "r");
if (fileRead == NULL) {
printf("File cannot be opened!...");
return NULL;
}
char readCharacter;
int lineCounter = 0;
while ((readCharacter = fgetc(fileRead)) != EOF) {
if (readCharacter == '\n') lineCounter++;
}
if (readCharacter == EOF) lineCounter++;
rewind(fileRead);
Citatel *list = (Citatel *)malloc(lineCounter * sizeof(Citatel));
for (int i = 0; i < lineCounter; i++) {
fscanf(fileRead, "%d %s %s", &list[i].id, &list[i].meno, &list[i].priezvisko);
}
printf("%d\n", sizeof list);
fclose(fileRead);
return list;
}
最佳答案
变量list
是一个指针,当你获取list
的大小时,你得到的是指针的大小,而不是它所指向的内容到。您需要跟踪自己分配的内存。
通常的链接:Don't cast the return of malloc
in C (或任何其他返回 void *
的函数)。
如果您使用 C++ 进行编程,那么您应该使用 std::vector
相反(或者最坏的情况下使用 new[]
)和 the standard library streams .
关于c - Malloc 不会创建具有所需大小的结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35257581/