我使用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);
答案 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
,您将调用未定义的行为并(可能)损坏您的堆栈。
无论如何,你是如何打印阵列的。