gpt4 book ai didi

c++ - 该程序未打印整个字符串

转载 作者:行者123 更新时间:2023-12-01 15:11:08 25 4
gpt4 key购买 nike

在此程序中,我将0到4的整数存储在一个字符串中,并且我想打印该字符串。

CODE:

int main()
{
string str=" ";
for(int i=0;i<5;i++)
str[i]=i+'0';
cout<<str;
return 0;
}

但是,当我运行该程序时,它仅显示字符串的第一个元素(表示“0”)。

谁能告诉我原因,为什么这个程序不能在输出中打印整个字符串?

最佳答案

int main()
{
string str=" "; // str.size() == 1

for(int i=0;i<5;i++)
str[i]=i+'0'; // str.size() is still 1

cout<<str; // str.size() is still 1
}

str[i]中,如果...
  • i>str.size()您正在越界访问数组并获得未定义的行为。
  • i==str.size()(空终止符在哪里),并且更改该值,还会得到未定义的行为。

  • But when i am printing this string with the help of for loop,this program prints whole string.e.g:

    for(int i=0; i<5; i++) {
    cout<<str[i]<<" ";
    }

    Why this loop print whole string, but not cout<<str?



    您已经做出了超出范围的更改,并且行为不确定。由于 short string optimization,您有可能可以一次一读回值(而不是导致程序崩溃),但是 size()str仍为1,因为您尚未更改大小。

    如果循环进一步进行,则在短字符串优化使用的区域之外,如下所示:
    for(int i=0; i<25; i++) {
    cout<<str[i]<<" ";
    }

    甚至可能导致崩溃。

    关于c++ - 该程序未打印整个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59545226/

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