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库部分函数的实现及函数的测试。格式先不管,先帮我找出为什么在运行时会出现内存错误(有关指针),我找不出来啊,希望各位大神帮忙。 展开
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库部分函数的实现及函数的测试。格式先不管,先帮我找出为什么在运行时会出现内存错误(有关指针),我找不出来啊,希望各位大神帮忙。 展开
4个回答
展开全部
strcpy(a,"hello world");
1,函数调用前,指针a没有初始化(分配存储空间),你是希望strcpy函数分配空间么?如果是就要修改strpcy的声明与实现;否则请在调用strcpy前初始化该指针
2,strlen不能处理空指针的情况
3,字符串结束是 '\0'
4,strcpy函数中分配的空间没有释放
strcpy函数返回后a的值(注意是a的值)没有变化,是个野指针,你定义a的时候没初始化。后面你用strlen去访问这个野指针,程序就crash了
1,函数调用前,指针a没有初始化(分配存储空间),你是希望strcpy函数分配空间么?如果是就要修改strpcy的声明与实现;否则请在调用strcpy前初始化该指针
2,strlen不能处理空指针的情况
3,字符串结束是 '\0'
4,strcpy函数中分配的空间没有释放
strcpy函数返回后a的值(注意是a的值)没有变化,是个野指针,你定义a的时候没初始化。后面你用strlen去访问这个野指针,程序就crash了
展开全部
#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;
}
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;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
'/0' 改成 '\0'
char* d是形参,不能改变a所指的地址
strcpy(a,"hello world");请改为
a=strcpy(a,"hello world");
char* d是形参,不能改变a所指的地址
strcpy(a,"hello world");请改为
a=strcpy(a,"hello world");
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char* strcpy(char *d,const char* s)
d在里面地址改变,需要取地址返回,否则传不到外面,改成如下:
char* strcpy(char *&d,const char* s)
d在里面地址改变,需要取地址返回,否则传不到外面,改成如下:
char* strcpy(char *&d,const char* s)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询