kimberaly 发表于 2010-4-18 16:06

一条习题懂希望有心人讲解讲解..

本帖最后由 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++一起进来研究研究吧

kings0527 发表于 2010-4-18 20:49

\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:

kimberaly 发表于 2010-4-19 09:45

:funk:eweqw我犯了底级错误..
页: [1]
查看完整版本: 一条习题懂希望有心人讲解讲解..