字符* 与uint8_t的字符串比较
String comparison of char* to uint8_t
我是 C 和 C++ 的新手,似乎无法弄清楚我需要如何比较这些值:
变量我正在传递:
typedef struct {
uint8_t ssid[33];
我要匹配的字符串。我已经尝试了这两种方法:
uint8_t AP_Match = "MatchString";
unsigned char* AP_Match = "MatchString";
我如何尝试匹配:
if (strncmp(list[i].ssid, "MatchString")) {
if (list[i].ssid == AP_Match) {
if (list[i].ssid == "MatchString") {
// This one fails because String is undeclared, despite having
// an include line for string.h
if (String(reinterpret_cast<const char*>(conf.sta.ssid)) == 'MatchString') {
我已经用几种不同的方式对此进行了研究,并进行了一些搜索。我知道其中一种或两种可能是错误的类型,但我不确定从我现在的位置到工作。
没有任何 C 标准定义的"字符串"类型。字符串只是基于所选编码存储为无符号值的字符数组。'string.h' 提供了各种用于比较、串联等的函数,但只有当你传递给它的值是一致的时,它才能工作。
运算符 "==" 对于字符串比较也是未定义的,因为它需要比较每个索引处的每个字符,对于两个大小可能不同且最终可能使用不同编码的数组,尽管具有相同的基础无符号整数表示形式(增加了误报比较的可能性(。你可以定义自己的函数来做到这一点(注意 C 不允许重载运算符(,但除此之外,你会坚持使用标准库提供的内容。
请注意,strncmp(( 采用一个大小参数来表示要比较的字符数(您的代码缺少此参数(。 https://www.tutorialspoint.com/c_standard_library/c_function_strncmp.htm
否则,您将查看函数 strcmp((,它要求输入字符串以 null 结尾(最后一个字符等于 '\0'(。最终,您需要考虑输入的可能组合是什么以及如何存储它们,并使用对所有可能性都具有鲁棒性的比较函数。
作为最后的旁注
if (list[i].ssid == "MatchString") {
由于 ssid是一个数组,您应该知道,当您进行此比较时,您实际上并不是在访问 ssid 的内容,而是访问 ssid 第一个元素的地址。当你将list[i].ssid传递到strcmp(或strncmp(时,你传递了一个指向内存中数组的第一个元素的指针。然后,该函数遍历整个数组,直到它达到空字符(在 strcmp 的情况下(或直到它比较了指定数量的元素(在 strncmp 的情况下(。
要匹配两个字符串,请使用strcmp
:
if (0==strcmp(str1, str2))
str1 和 str2 是保存以空结尾的字符串的内存地址。返回值零表示字符串相等。
在您的情况下:
if (0==strcmp(list[i].ssid, AP_Match))
if (0==strcmp(list[i].ssid, "MatchString"))
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- 字符串比较中的意外输出
- 如何执行不区分大小写的字符串比较?
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- <<运算符优先级与字符串比较
- ">"运算符和"<"运算符如何进行字符串比较?
- Qt C++11 字符串通过子字符串比较列出交集
- std::out_of_range字符串比较中的异常
- 我正在尝试从输入文件中读取,然后使用它们的子字符串比较字符串的特定部分
- 字符* 与uint8_t的字符串比较
- 用字符串 c++ 比较对向量的元素
- 使用循环进行词典字符串比较
- 如何为C++映射创建自己的字符串比较对象
- 不带比较()的字符串比较
- 与 IF 语句C++的字符串比较?
- 字符串比较在与变量一起使用时给出不同的输出
- 更快的字符串比较排序,用于唯一()
- C 字符串比较“祝您好运”&gt;“再见”
- C 奇怪的行为和字符串比较
- 子字符串与 std::memcmp 或字符串::比较的比较