c语言中使用strcmp()比较两个二进制文件
compare two binary files using strcmp() in c Language
首先抱歉我的英语不好
我有两个二进制文件。
我把二进制文件分别存入缓冲区
然后我使用 strcmp() 比较了两个缓冲区。
strcmp() 的结果为零。
所以我认为两个二进制是相同的。
打开两个二进制文件,检查是否有区别。
但我发现差别不大。
有什么问题?
strcmp() 函数不是比较二进制与二进制的正确方法?
您不能使用字符串函数比较二进制数据。
您需要改用 memcmp
。
写了C函数strcmp
来比较字符串。在 C 中,字符串是 char
指针或数组,以空字节 ('[=12=]'
) 结尾。因此,比较只会上升到第一个空字节。
示例:
文件 A:"abcd[=13=]efg"
文件 B:"abcd[=14=]xyz"
由于两个文件都等于空字节,所以这些位置的“字符串”是相等的,尽管后面的内容可能不同。您应该改用函数 memcmp
(参见此 tutorial; see examples from the reference)。
编辑:
正如这个答案下的评论所指出的以及另一个答案中提到的,strcmp
and memcmp
的手册页是从标准库中了解这些功能的可靠资源。
首先抱歉我的英语不好
我有两个二进制文件。
我把二进制文件分别存入缓冲区
然后我使用 strcmp() 比较了两个缓冲区。
strcmp() 的结果为零。
所以我认为两个二进制是相同的。
打开两个二进制文件,检查是否有区别。
但我发现差别不大。
有什么问题?
strcmp() 函数不是比较二进制与二进制的正确方法?
您不能使用字符串函数比较二进制数据。
您需要改用 memcmp
。
写了C函数strcmp
来比较字符串。在 C 中,字符串是 char
指针或数组,以空字节 ('[=12=]'
) 结尾。因此,比较只会上升到第一个空字节。
示例:
文件 A:"abcd[=13=]efg"
文件 B:"abcd[=14=]xyz"
由于两个文件都等于空字节,所以这些位置的“字符串”是相等的,尽管后面的内容可能不同。您应该改用函数 memcmp
(参见此 tutorial; see examples from the reference)。
编辑:
正如这个答案下的评论所指出的以及另一个答案中提到的,strcmp
and memcmp
的手册页是从标准库中了解这些功能的可靠资源。