我有这个作为我的结构
struct theFile{
int count;
FILE *fPointer;
int *fileItems[];
}myFile;
这是我在fileItems中保存文件的方法。它正在正确地保存数字。例如
fileItems[0] = 5
,fileItems[1] = 45
,fileItems[2] = 35
void saveFile(){
myFile.fPointer = fopen("mileage.txt", "r");
int i = 0;
while (!feof(myFile.fPointer)){
myFile.fileItems[i] = (int*)malloc(sizeof(int));
fscanf(myFile.fPointer, " %d,", myFile.fileItems[i]);
i++;
}
myFile.count = i;
}
但当我用这种方法打印文件的内容时,它会正确地打印第一个数字,但随后它会将其余的数字打印为大数字。有人能告诉我为什么它没有打印正确的数组内容吗。
void viewFile(){
for(int i = 0; i < myFile.count; i++){
printf("%d, ", myFile.fileItems[i]);
}
}
另请注意,它是用c语言编写的。
最佳答案
int *fileItems[];
等于int ** fileItems;
很可能需要一个整数数组,而不是指向整数的指针数组。
将结构声明更改为int * fileItems;
,并在循环之前分配一次列表:
myFile.fileItems = malloc(sizeof(int) * initialNumberOfElements);
稍后,如果
initialNumberOfElements
太小,则在realloc
更多空间中:myFile.fileItems = realloc(myFile.fileItems, sizeof(int) * biggerElementCount);
那么
fscanf
的参数必须是&myFile.fileItems[i]
。当分配函数失败时,不要忘记添加错误处理代码。您使用的任何文件函数都是这样:所有I/O都可能失败。
关于c - printf打印的号码不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27543451/