“cpp/string/byte/memcmp”的版本间的差异
来自cppreference.com
小 |
|||
第1行: | 第1行: | ||
− | {{cpp/title| memcmp}} | + | {{cpp/title|memcmp}} |
{{cpp/string/byte/navbar}} | {{cpp/string/byte/navbar}} | ||
− | {{ddcl | header=cstring | | + | {{ddcl|header=cstring| |
int memcmp( const void* lhs, const void* rhs, std::size_t count ); | int memcmp( const void* lhs, const void* rhs, std::size_t count ); | ||
}} | }} | ||
− | 转译 {{ | + | 转译 {{|lhs}} 和 {{|rhs}} 所指向的对象为 {{c|unsigned char}} 数组,并比较这些数组的首 {{|count}} 个字节。按字典序比较。 |
− | 结果的符号是在被比较对象中相异的首对字节的值(都转译成 {{c|unsigned char}} | + | 结果的符号是在被比较对象中相异的首对字节的值(都转译成 {{c|unsigned char}})的差。 |
===参数=== | ===参数=== | ||
{{par begin}} | {{par begin}} | ||
− | {{par | lhs, rhs |指向要比较的内存缓冲区的指针}} | + | {{par|lhs, rhs|指向要比较的内存缓冲区的指针}} |
− | {{par | count |要检验的字节数}} | + | {{par|count|要检验的字节数}} |
{{par end}} | {{par end}} | ||
===返回值=== | ===返回值=== | ||
− | + | {{|lhs}} 中首个 字节(转译为 {{c|unsigned char}})小于 {{|rhs}} 中的对应字节 负值。 | |
− | + | {{|lhs}} 和 {{|rhs}} 的所有 {{|count}} 个字节相等 {{c|0}}。 | |
− | + | {{|lhs}} 中首个 字节大于 {{|rhs}} 中的对应字节 正值。 | |
===注解=== | ===注解=== | ||
− | 此函数读取[[ | + | 此函数读取[[/language/object|对象表示]],而非对象值,而且典型地只对无填充的可平凡复制对象有意义。例如 个 {{lc|std::string}} 或 {{lc|std::vector}} 类型对象间的 {{tt|memcmp()}} 将不比较 内容,而 个 {{c|struct {char c; int n;}}} 类型对象间的 {{tt|memcmp()}} 将比较填充字节, 值在 {{c|c}} 和 {{c|n}} 相同时 可以 。 |
===示例=== | ===示例=== | ||
{{example | {{example | ||
− | + | | | |
− | + | |code= | |
#include <iostream> | #include <iostream> | ||
#include <cstring> | #include <cstring> | ||
第34行: | 第34行: | ||
void demo(const char* lhs, const char* rhs, std::size_t sz) | void demo(const char* lhs, const char* rhs, std::size_t sz) | ||
{ | { | ||
− | std::cout << std::string(lhs, sz); | + | std::cout << std::string(lhs, sz) ; |
int rc = std::memcmp(lhs, rhs, sz); | int rc = std::memcmp(lhs, rhs, sz); | ||
− | if(rc == 0) | + | if (rc == 0) |
− | std::cout << " | + | std::cout << " "; |
− | else if(rc < 0) | + | else if (rc < 0) |
− | std::cout << " | + | std::cout << " " ; |
− | else if(rc > 0) | + | else if (rc > 0) |
− | std::cout << " | + | std::cout << " " << std::string(rhs, sz) << \n; |
− | + | ||
} | } | ||
第54行: | 第53行: | ||
demo(a1, a1, sizeof a1); | demo(a1, a1, sizeof a1); | ||
} | } | ||
− | + | |output= | |
− | abc | + | abc abd |
− | abd | + | abd abc |
− | abc | + | abc abc |
}} | }} | ||
===参阅=== | ===参阅=== | ||
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc inc | cpp/string/byte/dsc strcmp}} | + | {{dsc inc|cpp/string/byte/dsc strcmp}} |
− | {{dsc inc | cpp/string/byte/dsc strncmp}} | + | {{dsc inc|cpp/string/byte/dsc strncmp}} |
− | {{dsc see c | c/string/byte/memcmp}} | + | {{dsc see c|c/string/byte/memcmp}} |
{{dsc end}} | {{dsc end}} | ||
{{langlinks|de|en|es|fr|it|ja|pt|ru}} | {{langlinks|de|en|es|fr|it|ja|pt|ru}} |
2023年2月19日 (日) 23:53的版本
在标头 <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 中的对应字节的情况下返回负值。
在 lhs 和 rhs 的所有 count 个字节相等的情况下返回 0。
在 lhs 中首个有差别的字节大于 rhs 中的对应字节的情况下返回正值。
注解
此函数读取对象表示,而非对象值,而且典型地只对无填充的可平凡复制对象有意义。例如两个 std::string 或 std::vector 类型对象间的 memcmp()
将不比较它们的内容,而两个 struct {char c; int n;} 类型对象间的 memcmp()
将比较填充字节,它的值在 c 和 n 相同时也可以不同。
示例
运行此代码
#include <iostream> #include <cstring> void demo(const char* lhs, const char* rhs, std::size_t sz) { std::cout << std::string(lhs, sz) << " 在字典序中"; int rc = std::memcmp(lhs, rhs, sz); if (rc == 0) std::cout << "与 " << std::string(rhs, sz) << " 比较相等\n"; else if (rc < 0) std::cout << "先于 " << std::string(rhs, sz) << '\n'; else if (rc > 0) std::cout << "后于 " << std::string(rhs, sz) << '\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 在字典序中先于 abd abd 在字典序中后于 abc abc 在字典序中与 abc 比较相等
参阅
比较两个字符串 (函数) | |
比较两个字符串的一定量字符 (函数) | |
memcmp 的 C 文档
|