要更改函数中字符串的内容,使其在main函数中反映,我们需要接受字符串作为参考,如下所示。
Changing contents of a std::string with a function
但是在上面的代码中,我们也在改变字符串的大小(即,比它能容纳的更多),那么为什么程序不会崩溃呢?
将十进制转换为二进制的程序,请注意,代码不完整,我只是测试代码的第一部分。
void dectobin(string & bin, int n)
{
int i=0;
while(n!=0)
{
bin[i++]= (n % 2) + '0';
n = n / 2;
}
cout << i << endl;
cout << bin.size() << endl;
cout << bin << endl;
}
int main()
{
string s = "1";
dectobin(s,55);
cout << s << endl;
return 0;
}
O / p:6 1 1并且程序在代码块中崩溃。虽然链接中的上述代码完全正常。
当我用6个字符初始化main中的字符串时(即从十进制转换为二进制后的数字长度),它只输出正确的结果。
http://www.cplusplus.com/reference/string/string/capacity/
请注意,此容量不会限制字符串的长度。当此容量耗尽且需要更多容量时,它将由对象自动扩展(重新分配存储空间)。字符串长度的理论限制由成员max_size
给出
如果字符串自动调整大小,那么为什么我们需要resize函数呢?为什么我的十进制到二进制代码不起作用?
答案 0 :(得分:1)
关于std::string
:
char& operator[] (size_t pos); const char& operator[] (size_t pos) const;
如果pos不大于字符串长度,则函数永远不会 抛出异常(无抛出保证)。否则,它会导致 未定义的行为。
在while
循环中,您正在访问索引大于bin
的{{1}}字符串