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

why am i getting false output in string swap program

本文关键字:错误 输出 程序 字符串 交换 为什么      更新时间:2023-10-16

'
要求的程序是输入两个字符串并打印它们各自的大小作为输出中的第一行,而第二行包含两个字符串的串联,输出的第三行包含两个字符串的第一个字符交换后的原始字符串。下面是我的代码。一切都在工作,除了在打印第二个字符串时,它正在打印不必要的字符,因为整个第二个字符串没有被打印PS:我是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;
}`

输入:DLXECXSYEbfjoosgukxgywz

输出:9 14dlxecxsyebfjoosgukxgywzBLXECXSYE@ dfjoosgukxgywz

期望的输出:9 14dlxecxsyebfjoosgukxgywzblxecxsye dfjoosgukxgywz

字符串 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