gpt4 book ai didi

c++ - 修改字符串的长度和内容?

转载 作者:行者123 更新时间:2023-11-30 02:37:05 26 4
gpt4 key购买 nike

要在函数中更改字符串的内容以使其反射(reflect)在主函数中,我们需要接受字符串作为引用,如下所示。

Changing contents of a std::string with a function

But in the above code we are changing the size of string also(i.e, more than what it can hold), so why is the program not crashing ?

将十进制转换为二进制的程序,注意,代码不完整,我只是测试代码的第一部分。

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 and the program crashes in codeblocks. While the above code in the link works perfectly fine.

It only outputs the correct result, when i initialize the string in main with 6 characters(i.e, length of the number after it converts from decimal to binary).

http://www.cplusplus.com/reference/string/string/capacity/

Notice that this capacity does not suppose a limit on the length of the string. When this capacity is exhausted and more is needed, it is automatically expanded by the object (reallocating it storage space). The theoretical limit on the length of a string is given by member max_size

如果字符串自动调整大小,那么为什么我们需要调整大小功能,然后为什么我的十进制到二进制代码不起作用?

最佳答案

你的前提是错误的。你在想 1) 如果我越界访问一个字符串,那么我的程序就会崩溃,2) 我的程序不会崩溃,因此我不能越界访问一个字符串,3) 因此我显然越界了字符串访问必须实际调整字符串的大小。

1) 不正确。越界访问字符串会导致未定义的行为。这就是它所说的意思。您的程序可能会崩溃,但也可能不会,它的行为是未定义的。

事实上,访问字符串永远不会改变它的大小,这就是为什么我们有调整大小函数(和 push_back 等)。

我们必须每周多次收到像您这样的问题。未定义的行为显然是新手感到惊讶的概念。

关于c++ - 修改字符串的长度和内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32033304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com