注册 登录
编程论坛 C++教室

昨天看的道题目,试了下,两个程序,第一个貌似正常,结果输出数组越界,第二个稍微改动,程序崩溃....求助....

lianjiecuowu 发布于 2011-06-11 07:45, 640 次点击
已知 strcpy函数的原型是 char *strcpy (char *strDest,const char *strSrc);
其中strDest是目的字符串  strSrc是源字符串,不能调用C++/C的字符串库函数
写出strcpy函数???
char *strcpy (char *strDest,const char *strSrc)
上面是题目

#include<iostream>
using namespace std;
char *strcpy (char *strDest,const char *strSrc);
int main()
{
    char *s1="hello word";
    char*s2=new char[strlen(s1)+1];
    strcpy(s2,s1);
    cout<<s1<<endl;
    cout<<s2<<endl;
    system("pause");
    return 0;
}
char *strcpy (char *strDest,const char *strSrc)
{
     int i;
     for(i=0;i<strlen(strSrc);i++)
     strDest[i]=strSrc[i];
     return strDest;
}
输出来的结果:hello word
hello wordrosoftP葑勳O
请按任意键继续. . .求解释




改动后:




#include<iostream>
using namespace std;
char *strcpy (char *strDest,const char *strSrc);
int main()
{
    char *s1;
    cin>>s1;
    for(int j=0;j<strlen(s1);j++)
    cout<<s1[j];
    char*s2=new char[strlen(s1)+1];
    strcpy(s2,s1);
    cout<<s2<<endl;
    system("pause");
    return 0;
}
char *strcpy (char *strDest,const char *strSrc)
{
     int i;
     for(i=0;i<strlen(strSrc);i++)
     strDest[i]=strSrc[i];
     return strDest;
}
程序崩溃.....求助.....
3 回复
#2
wyhaoshuai2011-06-11 09:08
#include<iostream>
using namespace std;
char *strcpyy (char *strDest,const char *strSrc);
int main()
{
    char *s1=new char;
    cin>>s1;
    for(int j=0;j<strlen(s1);j++)
    cout<<s1[j];
    char*s2=new char[strlen(s1)];
    strcpyy(s2,s1);
    cout<<s2<<endl;
    system("pause");
    return 0;
}
char *strcpyy (char *strDest,const char *strSrc)
{
     int i;
     for(i=0;i<strlen(strSrc);i++)
     strDest[i]=strSrc[i];
     return strDest;
}
#3
ljt2011-06-12 00:00
不看别的,你的strcpy就写错了,字符串是已\0结束,你得到的肯定不是以这个结束
#4
lianjiecuowu2011-06-12 07:46
回复 3楼 ljt
应该是吧....我仔细看过啦,没错啊应该.strlen(s1)得到的是结束符前面的字符串的长度,加一不就是连上结束符的总长度?好晕那 ,还请看看哪里出错啊...
1