首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fwrite,fread - fread的问题

fwrite,fread - fread的问题
EN

Stack Overflow用户
提问于 2011-01-19 19:14:51
回答 3查看 1.8K关注 0票数 0

我有以下代码:

代码语言:javascript
复制
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不起作用

EN

回答 3

Stack Overflow用户

发布于 2011-01-19 19:20:51

你的问题是你没有为读取分配缓冲区。事实上,行

代码语言:javascript
复制
fread(pedal2[i],5,1,plik)

读取未知位置。你需要分配内存(在你的例子中,零终止的字符串是5+1字节)。

代码语言:javascript
复制
pedal2[i] = malloc(5+1);
fread(pedal2[i],5,1,plik)

使用后别忘了释放。

票数 1
EN

Stack Overflow用户

发布于 2011-01-19 19:18:50

在没有事先为pedal2分配空间的情况下,您不能读入它。

你需要这样的东西:

代码语言:javascript
复制
for (int i = 0; i < 20; ++i) {
    pedal[i] = malloc(100); //allocate some space
}
票数 0
EN

Stack Overflow用户

发布于 2011-01-19 19:27:13

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4734561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档