一条习题懂希望有心人讲解讲解..
本帖最后由 kimberaly 于 2010-4-18 16:10 编辑原题是:
int main()
{
char str1[]={"Tomato Studio"};
char *str2;
int size=________________;
str2=_______;
cout<<"STR1的内容是"<<str1<<endl;
strcopy(str1,str2);
cout<<"String Copied..."<<endl;
cout<<"STR2的内容是"<<str2<<endl;
__________;
return 0;
}
void strcopy(char *string1,char *string2)
{
for(char *temp=______;*temp!='\0';*temp=______)
{
_________;
string2++;
}
_________;
}
我自己补充后:
#include <iostream.h>
void strcopy(char *string1,char*string2);
int main()
{
char str1[]={"Tomato Studio"};
char *str2;
int size=sizeof(str1)/sizeof(char);
str2=new char;
cout<<size<<endl;
cout<<"STR1的内容是"<<str1<<endl;
strcopy(str1,str2);
cout<<"String Copied"<<endl;
cout<<"STR2的内容是"<<str2<<endl;
delete []str2;
return 0;
}
void strcopy(char *string1,char*string2)
{
for(char *temp=string1;*temp!='\0';temp++)
{
string2=temp;
string2++;
}
_________;//这里不知怎样填,但上百度一查后,得知可以这样*string2 = '\0';或这样写*string2=*temp;我就是不能白这里为何要这样写...
}
我知道明次同学也在学C++一起进来研究研究吧 \0 就是传说中的结束标志呵呵
其实应该很早很早没有学习语言之前学习破解的时候 你会在OD或者C32中看到字符串结尾后都是以.....—点点点—来结束。最常见的就是输入表API和dll模块的名字都是以....结束
这个应该在很多C语言的书籍中都有说的——比如hello world正常存储后是 hello world\0
我想你可能知道是结束标志 只是不理解为什么这样吧
因为前面for循环后 string2++ 当*temp=string1;*temp!='\0';temp++这句 string1加到最后一个字符也就是\0了,所以*temp也是\0,所以for循环内的复制不会执行了,但是此时——譬如是hello world——这个字符串还没有真正的在内存中结束,所以此时给他——*string2——也就是world后面的中的d这个字母的后面赋值为0表示结束。
貌似解释的够清晰了。日行一善:loveliness: :funk:eweqw我犯了底级错误..
页:
[1]