为什么我的fread程序没有在C中复制第一个字符?

时间:2015-12-09 02:08:11

标签: c malloc fwrite fread

帮助使用Malloc / freads / fwrites?第一个字母没有复制过来?

   while((c = getc(in))!=EOF){
      fread(point, length, 1, in);  
      fwrite(point, length, 1, final); 
   }

2 个答案:

答案 0 :(得分:3)

getc将字符读入c。因此第一个字符将存储到c中,下一个字符将存储在第二个字符中。

然后fread将一堆字符(count)读入ptr指向的内存中。所以第二个,第三个,......,计数+第1个字符将被存储到该存储器中。

然后fwrite写下它们(当然)。

(然后你的程序重复这个,直到它到达文件的末尾)

答案 1 :(得分:1)

假设您从文件和输出到文件的输入正常工作,这是您提供的代码块的一些问题:

  • 您将ptr声明为(int*)malloc(count)。问题是,ptr这里被视为一个整数数组,这意味着每个元素的大小为4个字节而不是1个,所以count必须是4的倍数。如果你想使用ptr存储字符符号,将其更改为ptr = (char*)malloc(count),或ptr = (int*) malloc(sizeof(int) * count)如果您的符号符号为c。实际上是4字节整数;

  • 您读取变量fread中的字符,但您没有使用它。

  • 根据this descriptionfwritefread的第二个参数是元素的大小,第三个是您想要读/写的元素数

  • 如果您想在文件结束之前执行while ((c=getc(in)) != EOF)...,则无需执行{{1}},只需按照this stackoverflow post

希望这有帮助。