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

关于字符串拷贝的问题.

开始学编程 发布于 2007-05-14 22:36, 908 次点击

#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!

6 回复
#2
raulxxyuer2007-05-14 22:54
你改了以后,在循环中,先执行了str1++;str2++;所以出现了乱码.因为第一个没有字符没有传给str2

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

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

strcpy()函数本来就是个函数为什么还要骗一个呢?
#3
raulxxyuer2007-05-14 23:01

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


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

#4
开始学编程2007-05-15 06:37
楼上的朋友,能解释一下下面这个语句吗?谢谢
*str1='\0';
#5
aipb20072007-05-15 10:38
以下是引用开始学编程在2007-5-15 6:37:08的发言:
楼上的朋友,能解释一下下面这个语句吗?谢谢
*str1='\0';

解引用后赋值 空字符!

#6
shenderong2007-05-15 12:16

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

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

#7
aipb20072007-05-15 12:57
以下是引用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')容易理解。

1