c++问题,求助啊。

#include"iostream.h"intstrlen(constchar*string){inti=0;while(*string!='/0'){string++;... #include"iostream.h"

int strlen(const char *string)

{ int i=0;
while(*string!='/0')
{string++;
i++;

}

return i;
}

char* strcpy(char *d,const char* s)
{
char* c=d=new char[strlen(s)+1];
for(int i=0;i<=strlen(s);i++)
{*(d+i)=*(s+i);

}
return c;

}

main()
{char *a;//=new char[100];
strcpy(a,"hello world");
int n=strlen(a);
cout<<a<<" "<<n<<endl;

}
这是一个我自定义string库部分函数的实现及函数的测试。格式先不管,先帮我找出为什么在运行时会出现内存错误(有关指针),我找不出来啊,希望各位大神帮忙。
展开
 我来答
peakli78
2012-12-16 · TA获得超过134个赞
知道答主
回答量:90
采纳率:0%
帮助的人:95.2万
展开全部
strcpy(a,"hello world");

1,函数调用前,指针a没有初始化(分配存储空间),你是希望strcpy函数分配空间么?如果是就要修改strpcy的声明与实现;否则请在调用strcpy前初始化该指针
2,strlen不能处理空指针的情况
3,字符串结束是 '\0'
4,strcpy函数中分配的空间没有释放

strcpy函数返回后a的值(注意是a的值)没有变化,是个野指针,你定义a的时候没初始化。后面你用strlen去访问这个野指针,程序就crash了
zyl0462
2012-12-16 · TA获得超过1082个赞
知道小有建树答主
回答量:433
采纳率:75%
帮助的人:332万
展开全部
#include"iostream.h"
int strlen(const char *string)//strlen 形参为常字符串指针,不能自增
{
int i=0;
if (*string!='\0')//斜杠写反了
{
i++;
return i+strlen(string+1);
}
else
return i;
}
char* strcpy(char *d,const char* s)
{
char* c=new char[strlen(s)+1];
for(int i=0;i<=strlen(s);i++)
{
*(d+i)=*(s+i);
*(c+i)=*(s+i);
}
return c;
}
void main()
{
char *a=new char[100];//先初始化
strcpy(a,"hello world");
int n=strlen(a);
cout<<a<<" "<<n<<endl;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
希伯来爵
2012-12-16 · TA获得超过612个赞
知道答主
回答量:187
采纳率:100%
帮助的人:76.2万
展开全部
'/0' 改成 '\0'

char* d是形参,不能改变a所指的地址
strcpy(a,"hello world");请改为
a=strcpy(a,"hello world");
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tigerych371
2012-12-16
知道答主
回答量:21
采纳率:0%
帮助的人:5.7万
展开全部
char* strcpy(char *d,const char* s)

d在里面地址改变,需要取地址返回,否则传不到外面,改成如下:

char* strcpy(char *&d,const char* s)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式