| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 903 人关注过本帖
标题:关于字符串拷贝的问题.
只看楼主 加入收藏
开始学编程
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-5-9
收藏
 问题点数:0 回复次数:6 
关于字符串拷贝的问题.

#include<iostream.h>


char *strcpy(char *str1,const char *str2);

void main()
{
char buffer[20];
strcpy(buffer,"Hello World!");
cout<<"buffer:"<<buffer<<endl;
}

char *strcpy(char *str1,const char *str2)
{
char *dest=str1; //因为返回时要用该地址
while(*str1++=*str2++);
return dest;
}
上面的程序运行正确结果为:Helle World!
如果把上面程序中的while(*str1++=*str2++);改为下面就运行错误
while(*str1)
{
str1++;
str2++;
*str1=*str2;
}
运行结果显示为:buffer:乱码llo World!

搜索更多相关主题的帖子: 字符 拷贝 
2007-05-14 22:36
raulxxyuer
Rank: 1
等 级:新手上路
威 望:1
帖 子:178
专家分:0
注 册:2007-4-23
收藏
得分:0 
你改了以后,在循环中,先执行了str1++;str2++;所以出现了乱码.因为第一个没有字符没有传给str2

但我改为
while(*str1)
{
*str1=*str2;
str1++;
str2++;

}
结果有了内存错误,敌众答案是Hello World! 下面的让高手改吧

strcpy()函数本来就是个函数为什么还要骗一个呢?

我很沒用,總是學不會遺忘,總是學不會割捨本不屬於我的東西。
2007-05-14 22:54
raulxxyuer
Rank: 1
等 级:新手上路
威 望:1
帖 子:178
专家分:0
注 册:2007-4-23
收藏
得分:0 

我感觉应该这样,这样就不会有错误了,对了,能够得到你的答案了!~~~~~~


#include<iostream>
#include<string>
using namespace std;


char *strccpy(char *str1,const char *str2);

void main()
{
char buffer[30];
strccpy(buffer,"Hello World!");
cout<<"buffer:"<<buffer<<endl;
}

char *strccpy(char *str1,const char *str2)
{
char *dest=str1; //因为返回时要用该地址
while(*str2)
{
*str1=*str2;
str1++;
str2++;
}
*str1='\0';

return dest;
}


我很沒用,總是學不會遺忘,總是學不會割捨本不屬於我的東西。
2007-05-14 23:01
开始学编程
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-5-9
收藏
得分:0 
楼上的朋友,能解释一下下面这个语句吗?谢谢
*str1='\0';
2007-05-15 06:37
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
以下是引用开始学编程在2007-5-15 6:37:08的发言:
楼上的朋友,能解释一下下面这个语句吗?谢谢
*str1='\0';

解引用后赋值 空字符!


Fight  to win  or  die...
2007-05-15 10:38
shenderong
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-5-15
收藏
得分:0 

while(*str2)
{
*str1=*str2;
str1++;
str2++;
}
*str1='\0';

这个循环是在*str2=='\0' 的时候跳出的吗? 那么就是说'\0' 相当与0?

2007-05-15 12:16
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
以下是引用shenderong在2007-5-15 12:16:44的发言:

while(*str2)
{
*str1=*str2;
str1++;
str2++;
}
*str1='\0';

这个循环是在*str2=='\0' 的时候跳出的吗? 那么就是说'\0' 相当与0?

不是,用作条(*pstr)为非空字符时作1,这是种约定而已。
可以这样写while(*str2) ;
不过更好的书写while(*str2 != '\0')容易理解。


Fight  to win  or  die...
2007-05-15 12:57
快速回复:关于字符串拷贝的问题.
数据加载中...
 
   



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

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