#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main ()
{
char a[]="one string",b[]="twostrings";
strcpy (a,b);
cout<<"A="<<a;
cout<<endl<<"B="<<b<<endl;
}
a和b在显示它们之后是相同的,但是如果我放置像b[]="two strings"
这样的空格,然后是cout b,它会将b显示为空白,为什么?
答案 0 :(得分:6)
因为有了空格,a[]
缓冲区的大小不足以容纳b
的副本,并且您尝试这样做会破坏堆栈,从而产生未定义的行为。任何事情都可能发生,但在你的情况下很可能会覆盖下一个变量的第一个字节(即b
)并终止NUL
,使b
显示为空。
拼写出来:
a b
one string0two strings0 // original content 0=NUL
two strings0wo strings0 // after copy
强制性提示:尽可能使用std::string
。