std::memcmp
来自 cppreference.cn
定义于头文件 <cstring> |
||
int memcmp( const void* lhs, const void* rhs, std::size_t count ); |
||
将 lhs 和 rhs 指向的对象重新解释为 unsigned char 数组,并比较这些数组的前 count 个字节。比较是按字典序进行的。
结果的符号是对象比较中第一个不同的字节对(都解释为 unsigned char)的值之差的符号。
内容 |
[编辑] 参数
lhs, rhs | - | 要比较的内存缓冲区的指针 |
count | - | 要检查的字节数 |
[编辑] 返回值
如果 lhs 中第一个不同的字节(重新解释为 unsigned char)小于 rhs 中对应的字节,则为负值。
0 如果 lhs 和 rhs 的所有 count 个字节都相等,则为 0。
如果 lhs 中第一个不同的字节大于 rhs 中对应的字节,则为正值。
[编辑] 注解
此函数读取对象表示,而不是对象值,并且通常仅对没有填充的可平凡复制 (trivially-copyable) 对象有意义。例如,memcmp() 在 std::string 或 std::vector 类型的两个对象之间不会比较它们的内容;memcmp() 在 struct { char c; int n; } 类型的两个对象之间会比较填充字节,当 c 和 n 的值相同时,填充字节的值可能不同;即使没有填充字节,也会比较 int 而不考虑字节序。
[编辑] 示例
运行此代码
#include <cstring> #include <iostream> void demo(const char* lhs, const char* rhs, std::size_t sz) { std::cout << std::string(lhs, sz); const int rc = std::memcmp(lhs, rhs, sz); if (rc < 0) std::cout << " precedes "; else if (rc > 0) std::cout << " follows "; else std::cout << " compares equal to "; std::cout << std::string(rhs, sz) << " in lexicographical order\n"; } int main() { char a1[] = {'a', 'b', 'c'}; char a2[sizeof a1] = {'a', 'b', 'd'}; demo(a1, a2, sizeof a1); demo(a2, a1, sizeof a1); demo(a1, a1, sizeof a1); }
输出
abc precedes abd in lexicographical order abd follows abc in lexicographical order abc compares equal to abc in lexicographical order
[编辑] 参见
比较两个字符串 (函数) | |
比较两个字符串的特定数量的字符 (函数) | |
C 文档 关于 memcmp
|