std:: memcmp
|
定义于头文件
<cstring>
|
||
|
int
memcmp
(
const
void
*
lhs,
const
void
*
rhs,
std::
size_t
count
)
;
|
||
将 lhs 和 rhs 所指向的对象重新解释为 unsigned char 数组,并比较这两个数组的前 count 个字节。比较按字典序进行。
结果的符号取决于对象比较中第一对不同的字节值(均解释为 unsigned char )的差值符号。
目录 |
参数
| lhs, rhs | - | 待比较的内存缓冲区指针 |
| count | - | 需要检查的字节数 |
返回值
若第一个不同的字节(重新解释为 unsigned char )在 lhs 中小于 rhs 中的对应字节,则返回负值。
0 若 lhs 与 rhs 的全部 count 字节均相等。
若 lhs 中首个不同字节的值大于 rhs 中对应字节的值,则返回正值。
注释
此函数读取的是
对象表示
而非对象值,通常仅对无填充字节的可平凡复制对象有意义。例如:对两个
std::string
或
std::vector
类型对象进行
memcmp()
不会比较其内容;对两个
struct
{
char
c
;
int
n
;
}
类型对象进行
memcmp()
会比较可能因
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
|
|