【发布时间】:2015-10-20 02:56:55
【问题描述】:
我正在学习 C 文件操作,并且遇到一个特定问题,我需要将字母(A-Z、a-z)存储为从文件中读取的字符串。所以,如果我有abcd&*dvcd,那么abcd 是一个字符串,dvcd 是一个字符串。
基本上我有两个问题:
- 我事先不知道要存储的字符串的大小。
- 我需要跳过非字母字符
我想我会通过使用 fscanf 格式字符串来解决这两个问题。这是我的想法。我需要以某种方式跳过使用fscanf 格式字符串来查找我在文件中的位置。然后,我可以从保存的起始位置中减去我需要的字符串 malloc。然后,我 malloc 指定长度的字符串,然后,我可以回到保存的位置并实际读取它。
但是,我不知道如何告诉fscanf 不存储扫描的字符串?
或者是否有其他方法可以跳过非字母字符?
【问题讨论】:
-
@JonathanLeffler 哦。您的意思是将文件中的字符串存储在内存中?我不认为这是可行的,因为我将使用非常大的文本文件的程序......
-
您还打算将它存储在哪里?它不需要使用比您计划做的更多的内存——如果您不走运,每个字符串可能多 32 个字节。您可以在读取和处理每一行后删除字符串 - 否则会泄漏内存。
-
使用 fgets,我怎么知道字符串长度是多少?它可能是一个跨越多行的字符串
-
根据问题陈述,字符串不能跨越多行,因为换行符不在集合 a...z 或 A...Z 中