从文件加载数组

时间:2017-05-29 19:27:07

标签: c file-handling

我使用fwrite保存数组元素,并尝试使用fread将以前保存的数据加载到数组中。 fread的返回值不为零,这意味着它成功了。但是当我打印数组时,它是空的,没有任何东西被打印出来。 我已将数组保存为文件

fwrite(num, sizeof(int), k, q); //num is the same array, k=no of elements, q is the file pointer

这是我的代码:

int num[50], NoOfElement;
FILE *p;
if(p = fopen("data.txt", "rb") == NULL)
{
    printf("Error");
    exit(1);
}
fseek(p, 0, SEEK_END);
NoOfElement = ftell(p) / sizeof(int); //no of elements in the file
fseek(p, 0, SEEK_SET);
fread(num, sizeof(int), NoOfElement, p);

2 个答案:

答案 0 :(得分:1)

您的代码似乎很好。这个演示程序对我来说很好用:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num[50], NoOfElement;
    FILE *P;
    int i;

    // Generate test data
    for (i = 0; i < 5; ++i)
        num[i] = i+1;

    // Write test data
    P = fopen("data.txt", "wb");
    fwrite(num, sizeof(int), 5, P);
    fclose(P);

    // Overwrite the test data so we know we read it OK
    for (i = 0; i < 5; ++i)
        num[i] = -1;

    // Your code for reading test data
    if((P = fopen("data.txt", "rb")) == NULL)
    {
        printf("Error");
        exit(1);
    }
    fseek(P, 0, SEEK_END);
    NoOfElement = ftell(P) / sizeof(int); //no of elements in the file
    fseek(P, 0, SEEK_SET);
    fread(num, sizeof(int), NoOfElement, P);

    // Output test data (shows 1 -> 5 as expected)
    for (i = 0; i < NoOfElement; ++i)
        printf("%d\n", num[i]);
}

答案 1 :(得分:0)

我可以看到两个问题。第一个是你使用未声明的变量p(你声明了FILE *P;而C是区分大小写的。)

但是假设这是转录中的拼写错误,而不是实际代码中的错误,那么您也会遇到缓冲区溢出问题。如果NoOfElement > 50,您将调用未定义的行为并(可能)损坏您的堆栈。

无论如何,你是如何打印阵列的。