我正在尝试从我刚刚创建的long数组中获取数据但是我获得了不同的数据。
请参阅以下代码:
#include <string.h>
#include "readfile.h"
int main()
{
long wr_data [6] ;
wr_data[0] = 11;
wr_data[1] = 1100;
wr_data[2] = 1122323;
wr_data[3] = 11333;
wr_data[4] = 11434243;
wr_data[5] = 1166587;
writeFile(wr_data);
readFile();
return(0);
}
int readFile()
{
FILE *file;
long * data
printf("Error Reading File\n");;
/* Open file for both reading and writing */
file = fopen(fileName, "r");
if (file == NULL)
{
printf("Error Reading File\n");
return -1;
}
for (int i = 0; i < 5; i++)
{
fscanf(file, "%ld", &data[i] );
printf("data[%d]: %ld \n",i, data[i]);
}
fclose(file);
return 0;
}
int writeFile(long * data)
{
FILE *fp;
if (data != NULL)
{
if ((fp = fopen(fileName,"w")) == NULL)
return -1;
if (*data !=0 )
fwrite(data,sizeof(long),6,fp);
printf("Write data\n");
fclose(fp);
}
return 0;
}
我得到的结果如下:
我想保留write函数,因为它来自现有代码。我也试过功能fread但没有成功
fread(data, sizeof(long ), 6, file);
提前感谢您的帮助。
答案 0 :(得分:2)
它在这里工作。我对您的代码进行了以下更改:
//needed for malloc
#include <stdio.h>
//needed for output
#include <stdlib.h>
...
char *fileName = "so";
...
//allocate memory to store the values
long *data = (long *)malloc(sizeof(long)*6);
...
//read the stored longs
fread(data, sizeof(long ), 6, file);
int i;
for(i=0; i<6; i++)
printf("%ld\n", data[i]);
你觉得怎么样?
编辑: 那么主要的变化就是内存分配。当您想要存储任何类型的值时,您的程序需要由操作系统授予存储区以存储这些值。
在这种情况下,我们有两个选项,要么创建一个具有固定大小的静态分配数组,要么使用malloc函数或等效函数以动态方式分配所需的内存。
不要忘了,如果你想存储一些东西,首先要确保你有一个存储位置(即分配的内存)。如果你没有,你很可能会收到错误&#34; Segmentation Fault&#34; aka&#34; SIGSEGV&#34;这意味着你试图访问不属于你的内存。此外,&#34; fscanf(文件,&#34;%ld&#34;,&amp; data [i]);&#34;将读&#34;文件&#34;作为文本,将尝试解析同一文本中的浮动。由于您将长片存储为长片而不是文本,因此您无法正常写作和阅读不同的内容。
答案 1 :(得分:1)
您正在将数组的二进制内容写入文件,然后尝试将其解释为长值,这显然不起作用。如果要将数字存储为文本,则必须在写入之前将其转换为文本,或使用fprintf(FILE *, const char *, ...)
函数将其打印到文件。
使用文本文件使用以下代码正常工作(您可能希望更改文件名)。否则,根据您的需要,您可以fwrite
和fread
整个内容。
#include <stdio.h>
const char *filename = "yourfile";
int readFile()
{
FILE *file;
long data[6];
int i;
printf("Error Reading File\n");;
/* Open file for both reading and writing */
file = fopen(filename, "r");
if (file == NULL)
{
printf("Error Reading File\n");
return -1;
}
for (i = 0; i < 6; i++)
{
fscanf(file, "%ld", &data[i] );
printf("data[%d]: %ld \n",i, data[i]);
}
fclose(file);
return 0;
}
int writeFile(long * data)
{
FILE *fp;
int i;
if (data != NULL)
{
if ((fp = fopen(filename,"w")) == NULL)
return -1;
if (*data !=0 )
{
for(i = 0; i != 6; ++i)
fprintf(fp, "%ld ", data[i]);
}
printf("Write data\n");
fclose(fp);
}
return 0;
}
int main()
{
long wr_data [6] ;
wr_data[0] = 11;
wr_data[1] = 1100;
wr_data[2] = 1122323;
wr_data[3] = 11333;
wr_data[4] = 11434243;
wr_data[5] = 1166587;
writeFile(wr_data);
readFile();
return(0);
}