int main() {
std::string s;
const int p = 4;
s.resize(p);
for(int i=0;i<p;i++)
s[i]='a';
std::cout << s << std::endl;
for(int i=0,j=p-1; i>=j; i++,j--) {
if(i%2 == 0){
s[i]='a';
s[j]='a';
} else {
s[i]='b';
s[j]='b';
}
}
std::cout << s << std::endl;
}
s="aaaa" // Initially
s="abba" // Expected string after for loop
s="aaaa" // Initially
s="aaaa" // But contents of s is not modified
最初在上面的程序中,字符串s只包含一个&#39; s,然后我尝试根据某些条件更改s的内容。但是内容不会改变。
如果字符串是x =&#34; abc&#34;如果我改变x [1] =&#39; a&#39;,x将被修改为x =&#34; aac&#34;。
为什么我无法更改上述程序中s的内容?
答案 0 :(得分:1)
使用此代码
string s;
for(i=0;i<p;i++)s[i]='a';
您有一个空(大小为0)的字符串并开始分配到结尾之后的元素,这会导致未定义的行为。在您的情况下,结果是一个垃圾字符串。在开始索引之前,您需要将字符串的大小调整为足够大:
string s;
s.resize(p);
for(i=0;i<p;i++)s[i]='a';
答案 1 :(得分:0)
您的for循环条件是向后的。它应该是#include"stdio.h"
void func(); // Forward declare func() here.
int main()
{
func();
}
void func() // Ensure func() has a return type 'void'
{
printf("This program uses a function.");
}
。