c++ - 使用反向循环反转字符串时空字符会发生什么

标签 c++ string loops null-character

我是 C++ 中字符串的新手。我只是对下面代码的工作感到困惑(用于反转字符串)。

std:: string    rev;

        for(int i=  str.size()-1;   i>=0;   --i)
        {
            rev.push_back(str[i]);  
        }

        std:: cout<<"   Reversed=   "<<rev<<endl;

问题是字符串的最后一个字符是空字符'\0'。因此,当循环运行第一次迭代时,它应该在 rev 的开头放置一个空字符,还有一点,这里的字符串 rev 可能不是空字符终止的因为 '\0' 没有指定为字符串的最后一个字符。

但是当我执行该程序时,它工作正常。我知道我在思考这一切时错了。谁能解释一下工作原理?我将很高兴并感谢你 :)

最佳答案

空终止符实际上不被视为 std::string 的一部分。它仅在您调用 c_str() 时发挥作用。所以 size()length() 不包含终止符。事实上,您可以将空字符放入 std::string 的中间,一切仍然有效,除了 c_str()(如果您的字符串可能包含空值,您应该使用 data()size())。

关于c++ - 使用反向循环反转字符串时空字符会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43692867/

相关文章:

C++ 是否将类返回到 const 引用中?

c++ - WSARecv 一次可以接收的最大字节数是多少?

c - 选择性删除字符串中的特定字符

c - &"string"与 "string"是同一地址吗?

java - 如何在二维数组中的变量行中循环我的代码?

c++ - mysqlclient库联动问题

c++ - 将 winrt::com_ptr<ID3D11Device1> 与 D3D11CreateDevice() 一起使用?

r - paste0 正在将所有内容转换为字符

javascript - 通过比较 Javascript 中的 2 个二维数组来查找缺失元素

php - 为什么 MYSQL 循环会卡住客户端浏览器?