从文件分配内存,然后使用fread和fwrite C

猎户座96

我的代码无法正常工作,即打开一个文件,计算其中的字符数,然后使用分配该文件malloc()然后,我应该使用从一个文件中读取字符(我的文件包含“ Hello World!”)fread(),然后使用将它们写入空白.txt文件fwrite

到目前为止,我的代码正在打印损坏的字符。我找不到任何针对我的问题的问题。如果有人能告诉我我在做什么错,我将不胜感激。我认为这是特定于我freadfwrite致电的,但是我没有尝试过。

有问题的代码(尚未评论,对不起!):

#include <stdio.h>
#include <stdlib.h>

//initialized using ./a.out in.txt out.txt

int main(int argc, char *argv[])
{
    FILE *fp;
    int count, end;
    char *memory;
    char c[64]; 

    fp = fopen(argv[1], "r");

    if((fp) == NULL)
    {
        printf("Error: cannot open file.\n");
    }

    else
    {
        while((fgetc(fp))!= EOF)
        {
            count++;    
        }

        memory = (char*)malloc(count);

        c[64] = fread(memory, sizeof(char), 1, fp);
        fclose(fp);

        fp = fopen(argv[2], "w");
        fwrite(c, sizeof(char), sizeof(c), fp); 

        fclose(fp);     
        free(memory);
    }       
    return 0;   
}
莫汉

代码有逻辑错误,如下

  1. 初始化变量 int count= 0 , char c[64]= {0};
  2. 不需要类型转换 memory = malloc(count);
  3. 首先,您已经计算了文件中char的数量,因此在再次读取文件之前,请通过倒带 fseek(fp,0,SEEK_SET);
  4. c[64] = fread(memory, sizeof(char), 1, fp);在这种情况下,如果您正在读取单个char文件,则应该读取完整的文件,要读取完整的文件do,fread(memory, 1, count, fp);并且c [64]超出范围并fread返回成功读取的char数。

  5. fwrite(c, sizeof(char), sizeof(c), fp);在此过程中,您正在将完整的char数组写入文件,但是您仅读取了数组中读取了char数量的单个变量。因此,您正在将未初始化的char数组写入文件。因此您的文件中的字符已损坏。

  6. 要写文件吗 fwrite(memory, 1, count, fp);

为解决此问题,请避免上述错误,并在char数组中读取完整的文件,然后写入。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用文件输入进行C内存分配

来自分类Dev

使用两个函数在C中同时实现fread,fopen和fwrite会导致错误?

来自分类Dev

有关为fread使用的char *分配内存的C问题

来自分类Dev

关于C中的fwrite()和fread()参数的困惑

来自分类Dev

fread()和fwrite在C编程中如何工作

来自分类Dev

关于C中的fwrite()和fread()参数的困惑

来自分类Dev

C - 读取然后写入文件而不使用内存(就地)?

来自分类Dev

使用fread和fwrite

来自分类Dev

C分配和内存开销

来自分类Dev

C内存分配和释放

来自分类Dev

内存分配和C编程

来自分类Dev

什么时候在C程序中分配和使用内存?

来自分类Dev

了解C内存分配和释放

来自分类Dev

C和Java之间的内存分配

来自分类Dev

C#对象比较和内存分配

来自分类Dev

堆栈和堆的内存分配量(c)

来自分类Dev

在C中循环分配和释放内存

来自分类Dev

c返回变量和可用的内存分配

来自分类Dev

C和Java中字符的内存分配

来自分类Dev

C#对象比较和内存分配

来自分类Dev

struct c ++的内存分配和释放

来自分类Dev

堆栈和堆的内存分配量(c)

来自分类Dev

C++ NULL 字符和内存分配

来自分类Dev

理解c中的内存分配和指针

来自分类Dev

在C中使用fread读取文件

来自分类Dev

在C中使用fread读取文件

来自分类Dev

如何使用malloc获取c中指针的内存地址,然后在该地址处分配char数组?

来自分类Dev

使用C程序扫描USB驱动器(fopen,fread,fwrite)

来自分类Dev

使用C程序扫描USB驱动器(fopen,fread,fwrite)