| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 847 人关注过本帖
标题:不用,实现strcpy函数,为什么运行结果不对
收藏  订阅  推荐  打印 
lijinyan
Rank: 1
等级:新手上路
帖子:1
积分:110
注册:2007-4-3
不用,实现strcpy函数,为什么运行结果不对

#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;
}

搜索更多相关主题的帖子: strcpy  函数  char  temp  结果  
2007-4-3 23:42
cpluslover
Rank: 2
等级:注册会员
威望:1
帖子:91
积分:1016
注册:2006-12-13

#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编辑过]


“运行正确”的程序不见得是高质量的程序
2007-4-4 12:31
cpluslover
Rank: 2
等级:注册会员
威望:1
帖子:91
积分:1016
注册:2006-12-13

这样改就行了

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

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

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

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


“运行正确”的程序不见得是高质量的程序
2007-4-4 12:33
wfpb
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:29
帖子:2188
积分:22230
注册:2006-4-2

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

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


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-4-4 16:49
cpluslover
Rank: 2
等级:注册会员
威望:1
帖子:91
积分:1016
注册:2006-12-13

以下是引用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.

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

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


“运行正确”的程序不见得是高质量的程序
2007-4-4 18:23
wfpb
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:29
帖子:2188
积分:22230
注册:2006-4-2

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


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-4-4 20:19
cpluslover
Rank: 2
等级:注册会员
威望:1
帖子:91
积分:1016
注册:2006-12-13

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

#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编辑过]


“运行正确”的程序不见得是高质量的程序
2007-4-4 21:19
cpluslover
Rank: 2
等级:注册会员
威望:1
帖子:91
积分:1016
注册:2006-12-13

另外,再说一点,请你拿2 楼的程序用VC编译一下
不要去运行

看看是不是有warings,warings内容就是返回了一个局部变量

“运行正确”的程序不见得是高质量的程序
2007-4-4 21:33
lyle3
Rank: 2
等级:注册会员
帖子:80
积分:900
注册:2006-5-19

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


我将再给你一次选择的机会............... QQ:514897584
2007-4-4 22:04
lyle3
Rank: 2
等级:注册会员
帖子:80
积分:900
注册:2006-5-19

还有 在用G++编译的时候出现了一个错误。。。
: incompatible types in assignment of `char*' to `char[10]'
这个什么意思?

我将再给你一次选择的机会............... QQ:514897584
2007-4-4 22:12
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.075383 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved