c++ - 标准 C++ 字符串库的奇怪行为

标签 c++ string

我开始编写用于查找子字符串的程序,但它不起作用并且它总是能找到子字符串。这是一种奇怪的行为,所以我编写了简单的程序:

#include <iostream>
#include <string>

using namespace std;

int main(){
    string str;
    str = "aaaa";
    unsigned found = str.find("bbbb");
    if(found!=std::string::npos){
        cout << "I FOUND IT!!!!\n";
    }
    return 0;
}

它显示文本“我找到了!!!”我不明白这是怎么回事。

最佳答案

std::string::find 返回一个 size_t

std::string::npos 被定义为适合 size_t 的最大值,对于 64 位程序可能是 0xFFFFFFFFFFFFFFFF

当您将其转换为无符号整数时,这可能是 32 位,所以 0xFFFFFFFF

作为 0xFFFFFFFFFFFFFFFF != 0xFFFFFFFF 你会得到你看到的结果。

关于c++ - 标准 C++ 字符串库的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16349206/

相关文章:

php - 如何使用php将字符串转换成数组

javascript - 当字符串没有协议(protocol)时匹配主机名 ://?

python - 将字母范围扩展到 Python 中的字符列表

c++ - 类模板静态成员初始化两次

c++ - 没有 "using"的模板基类的访问属性

c++ - 如何通过 Qt 样式表自定义 Qt 应用程序的标题栏?

c++ - 为什么 C++ 字符串需要 a\0?

c++ - 20 个问题游戏 - Switch 语句

c++ - 模板元函数组合 - Not 案例

Ruby - 将多行字符串居中