不显示 strcpy 源
strcpy source is not displayed
#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 显示后是相等的,但是如果我像这样输入 a space b[]="two strings"
,然后 cout b,它显示 b 为空白,为什么?
因为 space,a[]
缓冲区不够大,无法保存 b
的副本,而你试图这样做会破坏堆栈,产生 undefined行为。任何事情都可能发生,但在您的情况下,它很可能会用终止符 NUL
覆盖下一个变量(即 b
)的第一个字节,从而使 b
显示为空。
拼写出来:
a b
one string0two strings0 // original content 0=NUL
two strings0wo strings0 // after copy
强制提示:尽可能使用 std::string
。
#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 显示后是相等的,但是如果我像这样输入 a space b[]="two strings"
,然后 cout b,它显示 b 为空白,为什么?
因为 space,a[]
缓冲区不够大,无法保存 b
的副本,而你试图这样做会破坏堆栈,产生 undefined行为。任何事情都可能发生,但在您的情况下,它很可能会用终止符 NUL
覆盖下一个变量(即 b
)的第一个字节,从而使 b
显示为空。
拼写出来:
a b
one string0two strings0 // original content 0=NUL
two strings0wo strings0 // after copy
强制提示:尽可能使用 std::string
。