【发布时间】:2014-11-07 06:29:42
【问题描述】:
我有 fwrite 的这个函数表示,它向后写入字节。但是.. 它并没有真正将它们向后复制,这似乎很奇怪。
size_t fwrite_backward ( const void * ptr, size_t size, size_t count, FILE * stream )
{
int i, chr;
for(i = count * size; i != 0; i--)
{
if( fputc(*(unsigned char*)ptr + (count * size) - i, stream) != EOF )
chr++;
}
return chr;
}
它的行为应该与 fwrite 完全相同,但有两个不同之处:
- 它向后复制数据
- 没有设置
ferror
我可能做错了什么?
【问题讨论】:
-
提示:尝试在您的头脑中或使用调试器单步执行您的代码。在循环的第一次迭代中
i的值是多少?第一次迭代写入的第一个字节的索引是多少? -
你没有初始化
chr(大概应该设置为零)。但是,这不是主要问题。 -
哦,循环实际上是反转的..是的..我忘了初始化
chr谢谢.. -
是的,您有两种方法可以同时反转正在使用的数据的顺序,这意味着一种抵消另一种。
-
您还传递了一个指向
fputc的指针,您应该在其中传递一个值。