我对我遇到的这个小问题感到很困惑。我有一个非索引文件格式 header 。 (更具体地说是 ID3 header )现在,这个 header 存储一个字符串或三个字节,用于确认数据实际上是一个 ID3 标签(TAG
是字符串 btw。)重点是,现在这个 TAG
在文件格式中不是空终止的。所以有两件事可以做:
- 用
fread
加载整个文件对于未终止的字符串比较,请使用strncmp
.但:- 这听起来很老套
- 如果有人打开它并试图在事先不知情的情况下操纵字符串怎么办?
- 另一种选择是加载文件,但 C 结构不应完全映射到文件格式,而是包含适当的空终止符,然后应使用唯一调用加载每个成员。但是,这也感觉很老套而且很乏味。
非常感谢您的帮助,尤其是那些具有处理此类问题实际经验的人。
最佳答案
解析任何内容时首先要考虑的是:这些字段的长度是固定大小还是以计数为前缀(它们本身的大小是固定的,例如,几乎每个图形文件都有固定大小/结构的标题然后是可变大小的像素序列)?或者,该格式是否具有以某种方式分隔的完全可变长度字段(例如,MPEG4 帧由字节 0x00、0x00、0x01 分隔)?通常这个问题的答案将大大有助于告诉您如何解析它。
关于c - C风格的字符串文件格式难题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1585025/