strcpy source不显示

时间:2015-05-29 08:33:50

标签: c++ strcpy

 #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显示为空白,为什么?

1 个答案:

答案 0 :(得分:6)

因为有了空格,a[]缓冲区的大小不足以容纳b的副本,并且您尝试这样做会破坏堆栈,从而产生未定义的行为。任何事情都可能发生,但在你的情况下很可能会覆盖下一个变量的第一个字节(即b)并终止NUL,使b显示为空。

拼写出来:

a          b
one string0two strings0  // original content 0=NUL
two strings0wo strings0  // after copy

强制性提示:尽可能使用std::string