C++ 为什么我在字符串交换程序中得到错误的输出

C++ 为什么我在字符串交换程序中得到错误的输出,c++,C++,` 所要求的程序是输入两个字符串,并将它们各自的大小打印为输出中的第一行,而第二行包含两个字符串的串联,第三行包含交换两个字符串的第一个字符后的原始字符串。下面是我的代码。除了打印第二个字符串它正在打印不必要的字符,因为整个第二个字符串没有被打印 附言:我是c的新手++ int main() { string a,b,c; cin>>a>>b; int j=a.size(); int k=b.size(); char s[j],p[k];

`
所要求的程序是输入两个字符串,并将它们各自的大小打印为输出中的第一行,而第二行包含两个字符串的串联,第三行包含交换两个字符串的第一个字符后的原始字符串。下面是我的代码。除了打印第二个字符串它正在打印不必要的字符,因为整个第二个字符串没有被打印 附言:我是c的新手++

int main()
{
string a,b,c;


   cin>>a>>b;
   int j=a.size();
   int k=b.size();
   char s[j],p[k];
   cout<<a.size()<<" "<<b.size()<<endl;
 c=a+b;
 cout<<c<<endl;
for(int i=0;i<a.size();i++)
{
s[i]=a[i];

}
for(int i=0;i<b.size();i++)
{
p[i]=b[i];

}
char t;
t=s[0];
s[0]=p[0];
p[0]=t;
cout<<s<<" ";
cout<<p;
return 0;
}`
intmain()
{
字符串a、b、c;
cin>>a>>b;
int j=a.size();
int k=b.size();
chars[j],p[k];

cout字符串p的大小为k,即输入b(14)的大小

在for循环中,您从0迭代到输入a(9)的大小,在您的情况下,该大小小于输入b的大小


当您在代码末尾输出p的内容时,索引9到13处的字符未设置,您将从内存中的该位置打印不需要的内容。

我不理解字符数组的必要性

// Swapping first characters
char temp = a[0];
b[0] = a[0];
a[0] = temp;
请使用调试器并验证字符数组是否由nul字符终止


另请参见:
std::string::c_str()
strncpy

注意
chars[j],p[k]“/CODE”是可变长度数组,不是标准C++。为什么使用字符数组代替字符串?我想通过这种方式,我们可以交换字符串的第一个字符,这有助于我打印整个P,但是我的输出是:“BLXECXYE@ DFJOOSGUKXGYWZ”。虽然它们和多个空格之间不应该有“@”,但请记住检查答案是否有助于解决问题。