【问题标题】:How do I fwrite and fread array of strings to file?如何将字符串数组 fwrite 和 fread 写入文件?
【发布时间】:2017-04-10 02:11:56
【问题描述】:

我想将字符串数组写入文件。现在,我先写数组中字符串的数量,然后使用以下代码写数组:

int rows = 3;
char **c = calloc (rows,sizeof(char*));
c[0] = "cat\0";
c[1] = "dog\0";
c[2] = "mouse\0";

FILE * f = fopen("test", "w");
if (f) {
    fwrite(&rows, sizeof(int), 1, f);
    fwrite(c, sizeof(char*), rows, f);
}
fclose(f);

当我读回数据时,我得到一个空字符**。这是我的代码:

FILE * f = fopen("test", "r");
    if (f) {
        int num = -99;
        fread(&num, sizeof(int), 1, f);
        char** buff = malloc(num*sizeof(char*));
        fread(buff, sizeof(char), num, f);

        buff[num] = 0x00;

        for(int i = 0; i < num; i++) {
            printf("%s ", buff[i]);
        }
        printf("\n");
    }

【问题讨论】:

  • 你写/读一个指针数组。这几乎不是一个好主意。
  • @Olaf 我是否应该单独编写每个字符串而不是数组?
  • 您没有为输入端的每个字符串分配空间。您没有在输出端正确编写它们。您需要分别编写每个字符串。在尝试读取数据之前,您应该使用外部工具(例如 odxxd 或其他一些数据转储程序)检查文件的内容。
  • @JonathanLeffler 有没有办法单独编写一个数组而不是每个字符串?
  • 您必须将字符串存储在连续内存中,并在单个操作中写入连续内存的相关部分。您还需要知道该空间有多长。这是可以做到的,但这是一项适度的艰苦工作。

标签: c arrays io fwrite fread


【解决方案1】:

您只需将变量c 的地址写入文件'test'(通过函数fwrite(c,sizeof...))。为什么不将值写入文件?

【讨论】:

  • 欢迎来到 Stack Overflow。请尽快阅读About 页面。这个答案并不完全准确。代码将三个指针写入文件。它不写入字符串,并且写入指向文件的指针很少是建设性的,因为您无法再次读取指针值并使用它——地址可能是无效的。此外,这几乎与答案一样多的评论。我知道你还不能制作 cmets,但通常最好等待你的时间,提供好的答案,并且在你有足够的声誉允许这样做之前不要尝试制作 cmets。
  • 谢谢你,我是新手,所以缺乏经验,我会改进这一点,希望你能进一步指导我。
猜你喜欢
  • 2016-02-03
  • 1970-01-01
  • 2012-02-29
  • 2016-07-12
  • 2012-03-17
  • 2016-05-08
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多