[英]How do you detect if a text file is corrupt before the program crashes?
我在ANSI C中编写一个命令行程序来解析Quake 2映射文件,以报告正在使用多少实体和纹理。 我的开发机器是MacBook。 我正在OS X Snow Leopard(32位),Windows XP(32位)和Vista(64位)以及Ubuntu 9.10(32位)上进行测试。
我在Vista上遇到了一个崩溃的错误,该错误会将该程序与某个映射文件挂起。 花了一段时间才弄清楚它不是程序,而是地图文件本身。 我没有发现有关文本文件的任何异常情况。 重新打开并保存地图文件可以解决该问题。
我的代码将整个地图文件加载到内存中,使用strtok()使用'\\ n'分隔行,解析每一行,然后将数据加载到单链接列表中进行处理。 有没有一种方法可以检测地图(文本)文件是否损坏?
最简单的非编程解决方案是添加包含问题和解决方案的FAQ文件。
在阅读每一行时,都会对其进行解析,以确定其是否有效。 如果您的方法失败,您可以简单地让用户知道数据已损坏,但是您仍然可以正常退出。
使用解析器生成器工具,您可以轻松检测语法错误。
但是,即使语法正确,您也应始终假定内容可能不正确。
例如,如果文件格式如下:
您的代码不应仅仅分配n个大小的数组,并读取数组中的条目直到结束条件为止。 相反,您应该验证是否实际读取了n个条目(在这种情况下,请不要读取超过n个条目,以避免溢出)。
因此,请设计代码,使其不会盲目地信任输入。
我认为我已修复该错误。 我采取了一些步骤到达那里,并且测试进行顺利。
我暂时不考虑解析功能。 如果损坏或损坏的地图文件具有有效的匹配项,则最终将输出该“数据”。 垃圾进/垃圾出(GIGO)仍然是一个因素。 稍后再访问的内容。 我的程序的发行版本可以在这里找到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.