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

不用,实现strcpy函数,为什么运行结果不对

lijinyan 发布于 2007-04-03 23:42, 2087 次点击
#include <iostream.h>
char *strcpy(char *strdest,const char *strsrc)
{
char *temp;
temp=strdest;
strsrc=temp;
return temp;
}
void main()
{
char a[]="123",b[10];
strcpy(a,b);
cout<<"a="<<a<<endl<<"b="<<b<<endl;
}

12 回复
#2
cpluslover2007-04-04 12:31
#include <iostream.h>
char *strcpy(char *strdest,const char *strsrc)
{
char *temp;
temp=strdest;
strsrc=temp;
return temp;
}
void main()
{
char a[]="123";
char *b;
b=strcpy(a,b);//你拷贝的值返回到哪了?不知道返回到哪怎么输出啊
cout<<"a="<<a<<endl<<"b="<<b<<endl;
}

[此贴子已经被作者于2007-4-4 12:38:24编辑过]

#3
cpluslover2007-04-04 12:33
这样改就行了

但是这样不是明智的写法,原因,你设了一个局部变量指针去做为返回值

在很多情况下返回的值是不确定的,有时候会侥幸正确
正好上面我改的,只是侥幸正确

temp最好改为 char* static temp;或者为双指针,指针引用也行,这样更安全。

[此贴子已经被作者于2007-4-4 12:37:34编辑过]

#4
wfpb2007-04-04 16:49

ls:
char *strcpy(char *strdest,const char *strsrc)
{
char *temp;
temp=strdest;
strsrc=temp;
return temp;
}
这里没有不确定性,返回的是变量的值
这就好像
int s()
{
int a=0;
return a;
}
一样 ,只会返回0.

返回的值是一个地址,也是字符串数组的首地址,而内存也不是在函数中分配的,所以不是偶然正确.

#5
cpluslover2007-04-04 18:23
以下是引用wfpb在2007-4-4 16:49:02的发言:

ls:
char *strcpy(char *strdest,const char *strsrc)
{
char *temp;
temp=strdest;
strsrc=temp;
return temp;
}
这里没有不确定性,返回的是变量的值
这就好像
int s()
{
int a=0;
return a;
}
一样 ,只会返回0.

返回的值是一个地址,也是字符串数组的首地址,而内存也不是在函数中分配的,所以不是偶然正确.

真的是这样的吗?
它是没有分配内存,但这个指针本身是要分配内存的啊,要不怎么说一个指针占四个字节呢
而且它是局部变量,它所指的不用分配了,但它自己还是需要分配的,对不对。

#6
wfpb2007-04-04 20:19

是的,指针也是变量,所以我拿int s()作比喻
请问,int s(){int a=0;return a;}会出现问题吗?

#7
cpluslover2007-04-04 21:19

你的函数是整形是没有错,可是如果是指针呢
请你看看下面的程序吧

#include<iostream.h>
int* s()
{
int a=5;
return &a;
}
int d()
{
int b=3;
return b;
}

void main()
{
int *b=s();
cout<<*b<<endl;
d();
cout<<*b<<endl;
}
输出会是两个5吗?当然是不会的

[此贴子已经被作者于2007-4-4 21:31:27编辑过]

#8
cpluslover2007-04-04 21:33
另外,再说一点,请你拿2 楼的程序用VC编译一下
不要去运行

看看是不是有warings,warings内容就是返回了一个局部变量
#9
lyle32007-04-04 22:04

为什么搂住的 程序中的 main 函数是void类型的?而不是整型的呢?

#10
lyle32007-04-04 22:12
还有 在用G++编译的时候出现了一个错误。。。
: incompatible types in assignment of `char*' to `char[10]'
这个什么意思?
#11
wfpb2007-04-05 00:45
int* s()
{
int a=5;
return &a;
}
你返回的&a是函数内部分配内存的地址,当然是有问题的


char *strcpy(char *strdest,const char *strsrc)
{
char *temp;
temp=strdest;
strsrc=temp;
return temp;
}
返回的地址不是函数内部分配的内存
#12
cpluslover2007-04-05 01:22
似乎好多有点明白,但又不太肯定
我们老师讲的是最好 不要这样写
#13
wfpb2007-04-05 09:50

看情况而定

1