在C++中打印引号不是整个std :: string给出负的ASCII值?

use*_*973 1 c++ c++11

从文件中读取时遇到问题.以下是一些示例代码:

std::for_each(vec.begin(), vec.end(), [&](std::string str1) {

    //... split the string up by spaces into vector "split"

    for (auto& str : split) {
        std::cout << str << "\n";
        std::cout << str[0] << "\n";
    }
});
Run Code Online (Sandbox Code Playgroud)

所以基本上我在一行上打印出拆分的每个元素,然后打印第一个字符.我得到的是这个:

“test test test
?
Run Code Online (Sandbox Code Playgroud)

第一行是整行str,第二行应该是第一行.但是,它会打印一个?.即使使用a std::string也会得到相同的结果:

for (auto& str : split) {
        std::cout << str << "\n";
        std::cout << std::string(1, str[0]) << "\n";
}
Run Code Online (Sandbox Code Playgroud)

我正在使用clang++ -std=c++11我的设置.有没有人见过这个?

chr*_*ris 5

你的字符串可能没有编码一个元素=>一个字符.我能够在这里重现你的问题,它看起来像特殊的引号采用前三个字符串字节,所以这将打印正确:

std::cout << s.substr(0, 3);
Run Code Online (Sandbox Code Playgroud)

你的情况可能有点不同,但我猜你和科里鲁都是UTF-8.具体来说,该字符看起来就是这个,"左双引号",UTF-8值为0xE2809C.