| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1577 人关注过本帖
标题:C语言最简单的修改文本文件?
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
用低版本或其他编译器,把带_s的函数名去掉_s。

授人以渔,不授人以鱼。
2015-08-04 20:04
列车永不停息
Rank: 2
等 级:论坛游民
帖 子:76
专家分:48
注 册:2015-7-31
收藏
得分:0 
回复 20楼 TonyDeng
我刚刚学。。。老师叫我们下载VC++6.0,现在的电脑是XP系统,配置也低,用不起VS2012了。我有个问题呀,在那个程序里面,函数void Init(void)里面的这一行,Save_Data(FileName,students,_countof(students));的里面_countof(students)这一个是啥?看着像函数,但是却找不到这个函数。是个参赛,却也找不到这个参赛。
2015-08-04 20:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
那是一个宏,在cstdlib头中,是计算一个数组元素尺寸的。比如你定义char arr[10],那么_countof(arr)的结果就是10,它只对数组有效,如果数组通过传参被蜕化为指针,是无效的。

授人以渔,不授人以鱼。
2015-08-04 20:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
小心学到过时的东西!就算用旧版本,也要多阅读新的资讯,了解新版本与旧版本的差异,在将来迁移时知道怎么改,同时这也能帮助你看别人新版本的代码怎么改回来。

授人以渔,不授人以鱼。
2015-08-04 20:46
列车永不停息
Rank: 2
等 级:论坛游民
帖 子:76
专家分:48
注 册:2015-7-31
收藏
得分:0 
回复 23楼 TonyDeng
是不是在VC6里面没有这个宏啊?
2015-08-04 20:46
列车永不停息
Rank: 2
等 级:论坛游民
帖 子:76
专家分:48
注 册:2015-7-31
收藏
得分:0 
回复 24楼 TonyDeng
嗯嗯,和你交流才知道原来VC已经变到VS2012了,我回到学校马上去下载,我的笔记本放在学校了,现在用家里的配置低的电脑。
2015-08-04 20:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用列车永不停息在2015-8-4 20:46:39的发言:

是不是在VC6里面没有这个宏啊?

可以用别的方法,要求得数组的尺寸,旧的方法是sizeof(arr)/sizeof(char),亦即先算数组的总字节数,除以每个元素的尺寸。对char arr[10],就除以sizeof(char),对int arr[10],就除以sizeof(int)。

授人以渔,不授人以鱼。
2015-08-04 20:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
C/C++有很多编译器厂家和版本,函数和用法各有不同,大致是实现同样的功能,学习的时候,应该多了解这些。掌握的是功能,但具体用什么函数和方法,是不一样的,所以学C/C++最忌死守版本(即使标准也是参考的,不是教条)。

上班去了,这两天都不上电脑,你自己先琢磨吧。

[ 本帖最后由 TonyDeng 于 2015-8-4 20:53 编辑 ]

授人以渔,不授人以鱼。
2015-08-04 20:52
列车永不停息
Rank: 2
等 级:论坛游民
帖 子:76
专家分:48
注 册:2015-7-31
收藏
得分:0 
回复 28楼 TonyDeng
好的,十分感谢你,我争取这两天深度去理解链表和二进制文件读写。
2015-08-04 21:19
列车永不停息
Rank: 2
等 级:论坛游民
帖 子:76
专家分:48
注 册:2015-7-31
收藏
得分:0 
回复 28楼 TonyDeng
你给示范的程序,里面最核心的一段应该是这个函数
void Update_Data(const char* filename, const Student* student, size_t index)
{
    FILE* file;
    if (fopen_s(&file, filename, "rb+") == 0)
    {
        size_t count;
        fread(&count, sizeof(count), 1, file);
        fseek(file, (index - 1) * sizeof(Student), SEEK_CUR);
        fwrite(student, sizeof(Student), 1, file);
        fclose(file);
    }
    else
    {
        printf_s("File %s update failure.\n", filename);
    }
}
这个函数我是这样理解的,用fseek函数把文件读取的内部指针弄到我们想要改的数据那,然后重新把数据输入进去,输入多少数据,就覆盖多少数据,类似于word文档的改写模式。不知道这样理解对不对?

这里面我还有个疑问,就是定义count这个参数是用来干嘛的?

还有整个程序里面很多函数都出现fread(&count, sizeof(count), 1, file);,这一语句的意思是不是“读取一个‘sizeof(count)’字节的数据项到count里面”?我查一下,应该是这样的意思。那么按照这样理解count这个参数存储的东西就是文本文件里面的第一个值。可是我觉得这里count应该是代表文件里面有多少个“组”,但是这样我就没办法理解fread(&count, sizeof(count), 1, file);这一个语句了。

还望你能帮我理解到本质。
2015-08-05 10:18
快速回复:C语言最简单的修改文本文件?
数据加载中...
 
   



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

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