【发布时间】:2018-10-10 03:16:22
【问题描述】:
当这个用于交换两个字符串的代码被执行时,我得到了不想要的输出
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a2[] = "Hello world";
char a1[] = "Geek";
char a3[20];
cout<<a2<<endl<<a1<<endl;
strcpy(a3,a1);
strcpy(a1,a2);
strcpy(a2,a3);
cout<<a2<<endl<<a1<<endl;
}
我得到了这些结果:
Hello world
Geek
Geek
HelloGeek (I expect it to be HelloWorld)
我在代码中做错了什么。
【问题讨论】:
-
strcpy(a1,a2);-- 缓冲区溢出。char数组或任何数组不会神奇地调整自身大小。 -
至于您在代码中做错了什么:您正在编写 C++。为什么要使用原始数组的 C 风格字符串?
-
就像 Paul 说的:
char a1[] = "Geek";的行实际上是在说char a1[5] = "Geek";,而 strcpy 只复制字符 - 它不会使数组变大。 -
int a1[] = {1,2,3}; int a2[] = {4,5}; int a3[10];-- 尝试让a2保持 3 个整数。你不能——数组的大小是固定的,a2现在和永远可以容纳 2 个整数。这与您现在对字符的尝试没有什么不同。