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

时间:2014-01-25 04:17:16

标签: 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";
    }
});

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

“test test test
?

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

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

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

1 个答案:

答案 0 :(得分:5)

您的字符串可能未编码为一个元素=&gt;一个角色。我能够重现你的问题here,它看起来像特殊引号占用前三个字符串字节,所以这将打印正确:

std::cout << s.substr(0, 3);

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