fread()函数第一次读取成功,但第二次读取失败,为啥为啥为啥,

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fread()函数第一次读取成功,但第二次读取失败,为啥为啥为啥,相关的知识,希望对你有一定的参考价值。

while(!feof(fp))

z = fread(&temp,sizeof(struct money),1,fp);//第二次读取文件失败。为什么为什么为printf("%d ",z);这是截取的一部分,通过z的输出,它的输出是1 0。就是说第一次读取成功,第二次失败了,为什么

你这样肯定不对,fread对一个数据块进行读取,你传递的是&temp,需要一次性把所有的结构体都读完,不然你第二次读还是在&temp的位置写数据 参考技术A 有没有完整的代码啊,发过来看看

为啥第一次交换尝试有效,但第二次无效? [复制]

【中文标题】为啥第一次交换尝试有效,但第二次无效? [复制]【英文标题】:Why the first swap attempt works, but the second doesn't work? [duplicate]为什么第一次交换尝试有效,但第二次无效? [复制] 【发布时间】:2019-04-13 19:44:30 【问题描述】:
package main;

public class Main 
    double radius;
    public Main(double newRadius) 
        radius = newRadius;
    


    public static void main (String [] args) 
        Main x = new Main(1);
        Main y = new Main(2);
        Main temp;
        // try to swap first time
        temp = x;
        x = y;
        y = temp;
        System.out.println(x.radius + " " +  y.radius);
        x = new Main(1);
        y = new Main(2);
       // try to swap second time
        swap(x, y);
       System.out.println(x.radius + " " + y.radius);
    
    public static void swap(Main x, Main y) 
        Main temp = x;
        x = y;
        y = temp;
    


为什么第一次有效,第二次无效?第一个做了交换,但第二个没有。我正在传递对函数的引用。为什么这不起作用?

【问题讨论】:

引用按值传递。方法内部的变量不是方法外部的变量,因此重新分配它们不会改变外部变量。见Is Java pass-by-reference or pass-by-value? 【参考方案1】:

您误解了如何传递引用,您创建了一个交换引用的范围,然后该范围结束。

尝试将字段的值存储在变量中,例如temp = x.radius 然后赋值给 y.radius。

之所以第一次起作用,是因为作用域是一样的。

【讨论】:

以上是关于fread()函数第一次读取成功,但第二次读取失败,为啥为啥为啥,的主要内容,如果未能解决你的问题,请参考以下文章

每次 TortoiseSVN(通过 *** 连接时)第一次失败,但第二次工作

fread函数无法正确读取数据

PHP读取文件内容的方法

fread 和 fwrite 有没有失败?如何处理?

fread函数

c语言fread函数的用法