读书人

new char[]和memcpy连用时的奇怪有关

发布时间: 2012-02-24 16:30:38 作者: rapoo

new char[],和memcpy连用时的奇怪问题。
测试程序如下:

C/C++ code
#include <iostream>#include <string>using namespace std;int main(){    char s1[]="adfds9asdkjf";    cout <<strlen(s1);    char *s2=new char[strlen(s1)+1];    memcpy(s2,s1,strlen(s1));    cout<<s2<<endl;    return 0;}


运行后,会发现s2在进行过memcpy后会编程这种东西
"adfds9asdkjf妄铪铪铪"
何故??
如果代码改成
C/C++ code
#include <iostream>#include <string>using namespace std;int main(){    char s1[]="adfds9asdkjf";    cout <<strlen(s1);    char s2[13];    memcpy(s2,s1,strlen(s1));    cout<<s2<<endl;    return 0;}


就会出现这种结果
"adfds9asdkjf烫烫烫烫adfds9asdkjf"

除非使用 char s2[13]="000000000000";

这是为什么?哪个地方出问题了?




[解决办法]
char *s2=new char[strlen(s1)+1];


这一句后面加一句
memset( s2, 0, strlen(s1)+1 );

要不你找不到结尾符,另外申请空间最好也初始化一下
[解决办法]
就用memset初始化
[解决办法]
这种赋值最好都用strcpy 和 strncpy进行。

读书人网 >C++

热点推荐