| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
ADSL如何秒变专线,公网IP盒子了解一下千里之行 始于足下
共有 543 人关注过本帖
标题:新写了个复制粘贴的程序,还请大家看看还有没有什么不足
只看楼主 加入收藏
aCprogrammer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:38
专家分:43
注 册:2019-6-25
  得分:0 
我这个程序的意思是打开一个被复制的文件,把它复制到另一个文件中,然后把原来的文件数据销毁
2019-07-05 14:35
aCprogrammer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:38
专家分:43
注 册:2019-6-25
  得分:0 
附件: 您没有浏览附件的权限,请 登录注册
2019-07-05 14:39
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:313
帖 子:6530
专家分:37852
注 册:2011-1-18
  得分:0 
我只是搞不懂EOF不是判断文本文件的结尾吗,
再说一次“不是!!!”
EOF 是 fgetc 的一种可能的返回值。
当 fgetc 返回 EOF,说明文件读取出错无内容可读,判断是“错误”还是“无内容可读”可以用ferror或feof来判断。
我随便举个例子,假设 a.txt 就1个字节,内容是 char(0xFF),那么
    FILE* src = fopen( "a.txt", "rb" );
    int a = feof(src); // a 应当是 0
    int b = fgetc( src ); // b 应当不是 EOF,(char)b 应当是 0xFF ---------- 注意,这就是为什么C标准要将 fgetc 的返回类型定为 int 的原因,用于区分是 正常返回了一个char,还是出错了。
    int c = feof(src); // c 应当是 0 ---------- 注意,feof 并不判断是否尚有文件内容可读,它标示的是读文件出错是因为无内容可读了吗。
    int d = fgetc( src ); // d 应当是 EOF
    int e = feof(src); // c 应当不是 0

可我要的不是文本文件的复制粘贴啊
听不懂
2019-07-05 15:05
aCprogrammer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:38
专家分:43
注 册:2019-6-25
  得分:0 
那feof(FILE *文件指针)返回了一个非0的值不也可以表示文件结束了吗

[此贴子已经被作者于2019-7-5 15:11编辑过]

2019-07-05 15:10
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:313
帖 子:6530
专家分:37852
注 册:2011-1-18
  得分:0 
以下是引用aCprogrammer在2019-7-5 14:35:09的发言:

我这个程序的意思是打开一个被复制的文件,把它复制到另一个文件中,然后把原来的文件数据销毁
难道我给你的代码没完成“打开一个被复制的文件,把它复制到另一个文件中”这个功能?
“然后把原来的文件数据销毁”------ 我不知道“文件数据销毁”是干嘛用的,而且还留着个空文件在那里。但你觉得有用自己不会往代码里加“文件数据销毁”的功能吗?
2019-07-05 15:15
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:313
帖 子:6530
专家分:37852
注 册:2011-1-18
  得分:0 
回复 12楼 aCprogrammer
我不知道你从哪儿找来的,也不知道它瞎扯,还是文字理解有误。
看官方的C标准:
The feof function returns nonzero if and only if the end-of-file indicator is set for stream.
如果还迷糊,看 https://en.
Notes
This function only reports the stream state as reported by the most recent I/O operation, it does not examine the associated data source. For example, if the most recent I/O was a fgetc, which returned the last byte of a file, feof returns zero. The next fgetc fails and changes the stream state to end-of-file. Only then feof returns non-zero.
这个解释就比较清楚了。
2019-07-05 15:15
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:313
帖 子:6530
专家分:37852
注 册:2011-1-18
  得分:10 
以下是引用aCprogrammer在2019-7-5 15:10:31的发言:

那feof(FILE *文件指针)返回了一个非0的值不也可以表示文件结束了吗

返回一个非0值,确实表示文件结束,
返回一个0值,文件也可能已经结束了。
因为它就不是用来干这事的。
2019-07-05 15:19
aCprogrammer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:38
专家分:43
注 册:2019-6-25
  得分:0 
大哥别激动,我只是不明白而已,现在我懂了,但我设置的删除被复制文件的数据是因为它既然已经被复制了,那也就没有存在的意义了……
2019-07-05 15:39
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:313
帖 子:6530
专家分:37852
注 册:2011-1-18
  得分:0 
以下是引用aCprogrammer在2019-7-5 15:39:22的发言:

大哥别激动,我只是不明白而已,现在我懂了,但我设置的删除被复制文件的数据是因为它既然已经被复制了,那也就没有存在的意义了……
没有存在的意义了,难道不应该是将文件删除吗?你怎么只是清空文件内容,文件依然存在?
2019-07-05 16:22
aCprogrammer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:38
专家分:43
注 册:2019-6-25
  得分:0 
回复 19楼 rjsp
用"w"打开文件不进行录入不就可以覆盖原来的数据变成可利用的内存了吗
2019-07-05 16:31







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028313 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved