C程序读写txt文本
开始
参考菜鸟教程的代码开始写:
1 |
|
fopen问题
我在VS2022中使用fopen函数,编译的时候会报错“’fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.”这个错误。
一开始学C语言的时候就遇到过这个报错,意思就是这些函数不安全,可以define一个“_CRT_SECURE_NO_WARNINGS”来忽略报错。但是这样会导致编译器同样忽略其他致命错误,记得大一的时候,有个同学告诉我他的程序跑不起来,但没有报错和警告,就是因为引用了这个定义(笑),所以不安全我就不用了,而且这个定义确实也不推荐在正式代码中使用。
读取数据
索引找不到
我文本存储数据是以一行开头的一串字符作为索引:
1 |
|
但是出现了找不到索引的情况,我感觉是因为txt中包含了隐藏字符导致识别不到索引,可以用notepad–来删掉隐藏字符,但我是让程序直接生成了文本再读取也可以的。就像这样:
1 |
|
(笑)
自动判断索引大小
我写的代码索引是字符加一个空格,索引多了,每一个都要自己指定长度太麻烦了,所以我想自动计算索引长度:
1 |
|
比如“example_title ”的长度是14。
读取数据的存储
代码读取的数据是存储在Storage_Data_Value中的,但是我不想把Storage_Data_Value当作全局变量,所以我用了指针返回了数据:
1 |
|
写入数据
读写指针
查找了一些资料,我知道了如果将FILE* fp = NULL
当全局变量使用,可能会在多线程运行的时候出现问题,所以我改为了函数内的局部变量;同时由于写入操作是既要读又要写的,所以我又在这个函数里分成了FILE* read_fp = NULL
和FILE* write_fp = NULL
,这样应该就不会有什么问题了。
读取整个文件
由于标准C文件操作(比如fopen、fprintf)不支持直接删除或插入某一行,所以我只能把整个文件读下来,然后改某一行,最后再重新写进去。
1 |
|
我声明了一共4096字节,按照我存储的方式,可以存储100行左右的数据。
这里我又遇到了sprintf
的安全问题,使用sprintf_s
代替,防止缓冲区溢出。
1 |
|
最后的代码就是这样的。