我有这个作为我的结构

    struct theFile{
        int count;
        FILE *fPointer;
        int *fileItems[];
    }myFile;

这是我在fileItems中保存文件的方法。它正在正确地保存数字。例如fileItems[0] = 5fileItems[1] = 45fileItems[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/

10-09 08:59