none
以下程序为何只能输出一半 RRS feed

  • 问题

  • #include<iostream>
    #include<string>
    using namespace std;
    void swap(char *&x,char *&y){
    char *temp;
    x=temp;
    temp=y;
    y=x;
    }
    int main(){
     char *ap="Hello";
     char *bp="nice to meet you";
     cout<<ap<<"\t"<<bp<<endl;
     cout<<"ap:"<<ap<<endl;
     cout<<"bp:"<<bp<<endl;
     cout<<ap<<","<<bp<<endl;
     swap(*ap,*bp);
     cout<<"ap:"<<ap<<endl;
     cout<<"bp:"<<bp<<endl;
     cout<<ap<<","<<bp<<endl;
    return 0;
    }

    有错请指出

     

     


    曾仁福
    • 已更改类型 Rob Pan 2011年6月27日 3:19 这是一个问题
    2011年6月25日 17:57

答案

  • #include<iostream>
    #include<string>
    using namespace std;
    
    void swap(char *x,char *y)
    {
    	char *temp;
    	temp = x;
    	x = y;
    	y = temp;
    }
    
    int main()
    {
    	char *ap="Hello";
    	char *bp="nice to meet you";
    	cout<<ap<<"\t"<<bp<<endl; 
    	cout<<"ap:"<<ap<<endl;
    	cout<<"bp:"<<bp<<endl;
    	cout<<ap<<","<<bp<<endl;
    	swap(ap,bp);
    	cout<<"ap:"<<ap<<endl;
    	cout<<"bp:"<<bp<<endl;
    	cout<<ap<<","<<bp<<endl;
    	return 0;
    }
    


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年6月27日 0:18
    版主
  • 你好,

     

    根据您的代码,你是想通过swap函数,交换两个字符串。

     

    当您的代码运行到swap 函数的时候,编译器提示Access violation(访问冲突错误)。swap(*ap,*bp);意味着你传入了两个指针所知的内容。然而在访问赋值的时候发生了错误。这是因为*ap可以看做一个常量。所以您试图改变一个常量的值。所以发生了错误。

     

    我对您的代码做了一下修改。

    #include<iostream>

    #include<string>

    using namespace std;

     

    void swap(string &x,string &y)

    {

           string temp;

           temp = x;

           x = y;

           y = temp;

    }

     

    int main()

    {

           char *ap="Hello";

           char *bp="nice to meet you";

           cout<<ap<<"\t"<<bp<<endl;

           cout<<"ap:"<<ap<<endl;

           cout<<"bp:"<<bp<<endl;

           cout<<ap<<","<<bp<<endl;

           swap(ap,bp);

           cout<<"ap:"<<ap<<endl;

           cout<<"bp:"<<bp<<endl;

           cout<<ap<<","<<bp<<endl;

           return 0;

    }

     

    swap传入了连个指针,同时在交换的时候使用引用。这样就不会发生访问冲突。同时也能够交换成功。

     

    希望我的建议对您的疑问有所帮助。

     


    Rob Pan [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月27日 6:51

全部回复

  • #include<iostream>
    #include<string>
    using namespace std;
    
    void swap(char *x,char *y)
    {
    	char *temp;
    	temp = x;
    	x = y;
    	y = temp;
    }
    
    int main()
    {
    	char *ap="Hello";
    	char *bp="nice to meet you";
    	cout<<ap<<"\t"<<bp<<endl; 
    	cout<<"ap:"<<ap<<endl;
    	cout<<"bp:"<<bp<<endl;
    	cout<<ap<<","<<bp<<endl;
    	swap(ap,bp);
    	cout<<"ap:"<<ap<<endl;
    	cout<<"bp:"<<bp<<endl;
    	cout<<ap<<","<<bp<<endl;
    	return 0;
    }
    


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年6月27日 0:18
    版主
  • 你好,

     

    根据您的代码,你是想通过swap函数,交换两个字符串。

     

    当您的代码运行到swap 函数的时候,编译器提示Access violation(访问冲突错误)。swap(*ap,*bp);意味着你传入了两个指针所知的内容。然而在访问赋值的时候发生了错误。这是因为*ap可以看做一个常量。所以您试图改变一个常量的值。所以发生了错误。

     

    我对您的代码做了一下修改。

    #include<iostream>

    #include<string>

    using namespace std;

     

    void swap(string &x,string &y)

    {

           string temp;

           temp = x;

           x = y;

           y = temp;

    }

     

    int main()

    {

           char *ap="Hello";

           char *bp="nice to meet you";

           cout<<ap<<"\t"<<bp<<endl;

           cout<<"ap:"<<ap<<endl;

           cout<<"bp:"<<bp<<endl;

           cout<<ap<<","<<bp<<endl;

           swap(ap,bp);

           cout<<"ap:"<<ap<<endl;

           cout<<"bp:"<<bp<<endl;

           cout<<ap<<","<<bp<<endl;

           return 0;

    }

     

    swap传入了连个指针,同时在交换的时候使用引用。这样就不会发生访问冲突。同时也能够交换成功。

     

    希望我的建议对您的疑问有所帮助。

     


    Rob Pan [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年6月27日 6:51
  • Thank you very much,you are ringht
    曾仁福
    2011年6月27日 13:08