【问题标题】:How to read array saved in binary mode to text file in C如何将以二进制模式保存的数组读取到C中的文本文件
【发布时间】:2013-09-03 18:41:30
【问题描述】:

我有一个这样保存的字符串数组:

char clientdata[5][128];
char buffer[256];
... input values into array ...
FILE *f = fopen("client.txt", "w+b");
fwrite(clientdata, sizeof(char), sizeof(clientdata), f);
... read the array from file ...
fclose(f);

现在我想从上述代码中的文件中读取数组。我试过了:

fread(clientdata, sizeof(char), sizeof(clientdata), f);

然后我尝试在 clientdata 上使用 sprintf:

 sprintf(buffer,"%s",clientdata[1]);

这给了我错误:

clientdata 中的成员请求不是结构或联合

我做错了什么?

【问题讨论】:

  • 你能发布给你这个错误的实际代码吗?
  • 需要看更多代码才能回答。
  • 首先检查您调用的每个文件api的返回值(当然是在修复编译时错误之后)。
  • 我已经更新了更多代码

标签: c io


【解决方案1】:

正如其他人所指出的,您没有提供任何东西来解释在哪里

请求非结构或联合的成员

可能来自,例如在您的代码中,我们看不到 buffer 在任何地方定义...无论如何:

蛮力方法:(按 ANSI C 编译、构建和运行)

#include <ansi_c.h>
#define newBinaryFile "C:\\tempExtract\\newbinaryfile.bin"
int main(void)
{
    FILE *fp;
    int i;
    char clientDataNew[5][128] = {"","","","",""};
    char clientdata[5][128] = {  "This string is 128 bytes longggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg1\n",
                                 "This string is 128 bytes longggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg2\n",
                                 "This string is 128 bytes longggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg3\n",
                                 "This string is 128 bytes longggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg4\n",
                                 "This string is 128 bytes longggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg5\n"};

    fp = fopen (newBinaryFile, "wb");

    fwrite(clientdata, sizeof(char), sizeof(clientdata), fp);
//  for(i=0;i<5;i++)
//  {
//      fputs(clientdata[i], fp);
//  }
    fclose (fp);

    fopen(newBinaryFile, "rb");

    fread(clientDataNew, sizeof(char),sizeof(clientdata),fp);

    for(i=0;i<5;i++)
    {
        (fgets (clientDataNew[i], 128, fp));
    }
    fclose(fp);
    for(i=0;i<5;i++)
    {
        printf("%s", clientDataNew[i]); 
    }
    getchar();
    return 0;   
}

【讨论】:

  • 不能用 w+b 代替重新打开文件吗?
  • 是的 - 查看 fopen(...,"wb")。此外 fseek 可能会派上用场来重置指向流的指针
猜你喜欢
  • 2018-07-05
  • 2015-04-15
  • 2016-09-30
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
相关资源
最近更新 更多