当使用反向循环逆转字符串时,null字符会发生什么

What happens to null character when string is reversed using reverse loop

本文关键字:字符 null 什么 字符串 逆转 循环      更新时间:2023-10-16

我是新来的,在C 中有字符串。我只是与下面的代码的工作感到困惑(用于逆转字符串(。

std:: string    rev;
        for(int i=  str.size()-1;   i>=0;   --i)
        {
            rev.push_back(str[i]);  
        }
        std:: cout<<"   Reversed=   "<<rev<<endl;

问题是字符串的最后一个字符是null字符 ''。因此,当循环运行第一次迭代时,它应该在rev的开头和另一件事时放置一个空字符,因此,由于''未分配为字符串的最后一个字符,因此字符串rev可能不会被终止。

但是当我执行程序时,它可以正常工作。我知道我在思考这一切时错了。有人可以解释工作吗?我会高兴和感谢您:)

null终结器实际上并不是std::string的一部分。仅当您致电c_str()时才发挥作用。因此,size()length()不包括终结器。实际上,您可以将空字符放入std::string的中间,并且除了c_str()之外,所有内容仍然可以使用(如果您的字符串可能包含nulls,则应使用data()size()(。

自动添加'/0'运算符,因此您仅在'/0'之前循环直到字符。它基本上总是在那里,因此您没有看到任何更改。