gpt4 book ai didi

c程序输出

转载 作者:太空宇宙 更新时间:2023-11-04 06:43:55 24 4
gpt4 key购买 nike

#include<stdio.h>
int main()
{

FILE *fp,*fs;
fs=fopen("c.dat","w");
fp=fopen("c.dat","w");
putc('a',fp);
putc('1',fs);
close(fs);
close(fp);
return 0;
}

不考虑订单执行

 putc('a',fp);putc('1',fs);   


putc('1',fs);putc('a',fp);

c.dat 的内容仅为“1”。有人可以解释原因吗?

最佳答案

首先,您不能close() 使用fopen() 打开的文件,您必须fclose() 它。您在这里混合了两个抽象级别,文件句柄和文件指针。

最重要的是,我想您会发现这两个文件指针保持着独立的文件偏移量和缓冲区。无论哪一个最后关闭文件,都会最后写入它们的数据,覆盖另一个。

改变你的 fclose() 语句的顺序,你应该明白我的意思:

#include<stdio.h>
int main (void) {
FILE *fp,*fs;
fs=fopen("c.dat","w");
fp=fopen("c.dat","w");
fputc('a',fp);
fputc('1',fs);
fclose(fp); // Try changing these
fclose(fs); // two around.
return 0;
}

我这样做了,并始终根据上次关闭的文件获取内容。

而且,在你说你应该得到 a 因为 fp 是你关闭的最后一个之前,你确实没有关闭fp(使用 fclose())。

所做的 所做的是尝试close() 几乎肯定无效的文件句柄,因为文件句柄 通常相对较小值(例如,012),而文件指针通常是相对较大的值(例如,0xdeadbeef, 0xcaf3f00d).

因此,当您退出时,这两个文件的关闭都留给了 C 运行时环境(这很可能是以一种确定性的方式完成的,这就是为什么您总是在文件中获得相同的值)。

关于c程序输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4093893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com