| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2085 人关注过本帖
标题:不用,实现strcpy函数,为什么运行结果不对
只看楼主 加入收藏
lijinyan
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-4-3
收藏
 问题点数:0 回复次数:12 
不用,实现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-04-03 23:42
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 
#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-04-04 12:31
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 
这样改就行了

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

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

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

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


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

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-04-04 16:49
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 
以下是引用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-04-04 18:23
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

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


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-04-04 20:19
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 

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

#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-04-04 21:19
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 
另外,再说一点,请你拿2 楼的程序用VC编译一下
不要去运行

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

“运行正确”的程序不见得是高质量的程序
2007-04-04 21:33
lyle3
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2006-5-19
收藏
得分:0 

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


我将再给你一次选择的机会............... QQ:514897584
2007-04-04 22:04
lyle3
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2006-5-19
收藏
得分:0 
还有 在用G++编译的时候出现了一个错误。。。
: incompatible types in assignment of `char*' to `char[10]'
这个什么意思?

我将再给你一次选择的机会............... QQ:514897584
2007-04-04 22:12
快速回复:不用,实现strcpy函数,为什么运行结果不对
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017777 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved