【问题标题】:fwrite, fread - problems with freadfwrite, fread - fread 的问题
【发布时间】:2011-01-19 11:14:51
【问题描述】:

我有以下代码:

int main()
{
    char* pedal[20];
    char* pedal2[20];
    for (int i = 0; i < 20; i++)
    {
        pedal[i] = "Pedal";
    }
    FILE* plik;
    plik = fopen("teraz.txt","wb");
    for (int i = 0; i < 20; i++)
    {
       fwrite(pedal[i],strlen(pedal[i]),1,plik);
    }
    system("pause");
    fclose(plik);
    plik = fopen("teraz.txt","rb");
    for (int i = 0; i < 20; i++)
    {
        fread(pedal2[i],5,1,plik); //I know for now that every element has 5 bytes
    }
    for (int i = 0; i < 20; i++)
    {
        std::cout << pedal2[i] << std::endl;
    }
    fclose(plik);
    system("pause");
    return 0;
}

阅读时崩溃了,第二个问题让我们假设我有一个结构,我保留了整数、浮点数和 char* 数组,我怎样才能轻松地将整个结构写入文件?具有 sizeof 结构的正常 fwrite 不起作用

【问题讨论】:

    标签: c++ c structure fwrite fread


    【解决方案1】:

    您没有为读取分配缓冲区的问题。其实行

    fread(pedal2[i],5,1,plik)
    

    读到未知的地方。您需要分配内存(在您的情况下,零终止字符串为 5 + 1 个字节)。

    pedal2[i] = malloc(5+1);
    fread(pedal2[i],5,1,plik)
    

    使用后别忘了释放它。

    【讨论】:

      【解决方案2】:

      如果没有先分配空间,您将无法读取pedal2

      你需要这样的东西:

      for (int i = 0; i < 20; ++i) {
          pedal[i] = malloc(100); //allocate some space
      }
      

      【讨论】:

      • 即使提前设置为20?好吧,我想 malloc hre 我来了。那这个结构呢?
      • 不,您在堆栈上分配了一个包含 20 个指针的数组,但您分配的指针值并不完全相同。
      【解决方案3】:

      Simone & Dewfy 似乎已经回答了您的第一个问题。

      关于如何将结构值写入文件的第二个问题,您必须逐个成员写入。

      请查看fprintf。您可能可以使用它来编写不同的数据类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-12
        • 2019-05-30
        • 2020-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多