首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++指针类型转换有关问题,求解(无法输出hello)

2013-07-08 
C++指针类型转换问题,求解(无法输出hello)程序编译通过,运行出错,经过调试错误出现在strcpy((char*)str,

C++指针类型转换问题,求解(无法输出hello)
程序编译通过,运行出错,经过调试错误出现在strcpy((char*)str, "hello");这一句,请高手指教


void fun(char* str)
{
str = (char*)malloc(100);
//strcpy(str, "hello");
}
int _tmain(int argc, _TCHAR* argv[])
{
void *str = NULL;
fun((char*)&str);
strcpy((char*)str, "hello");
cout << str << endl;
return 0;
}

[解决办法]
引用:
程序编译通过,运行出错,经过调试错误出现在strcpy((char*)str, "hello");这一句,请高手指教


void fun(char* str)
{
//str = (char*)malloc(100);//这个其实是想,把char*当成char**用吧,达不到目的的。
        //这样会修改 实参地址的值复制过来的值,只是改变了str这个形参的值,不能修改 
        //传递过来的地址中的内容 
        // 改变指针p 的所指地址中的内容,用 *p 才行.
            
        *(char**)str = (char*)malloc(100);//这么做才能达到效果,不过不是太麻烦了吗!何必呢!!!
//strcpy(str, "hello");
}
int _tmain(int argc, _TCHAR* argv[])
{
void *str = NULL;
fun((char*)&str);//把void *的地址强制转换成(char*)指针
strcpy((char*)str, "hello");//这个虽然行了,不过折腾的得够呛;
                                    //而且你这么折腾有啥意义!!!
                                    //出错很正常呀;
                                    //因为这不是正常用法,所以很容易出错,
                                    //你这是给自己找麻烦吧!


cout << str << endl;         //这个只会输出void fun(char* str)内部的,分配内存的语句:
                                     //*(char**)str = (char*)malloc(100);分配的地址
                                     //输出指针的值而已,
        cout << (char*)str << endl;  //这个才会输出hello。
return 0;
}


你的行为不一致,程序运行自然就会抱怨了。

[解决办法]
void fun(char* str)
{
    str = (char*)malloc(100);
    //strcpy(str, "hello");
}

这个函数不对,应该是 

void fun(char** str)
{
    *str = (char*)malloc(100);
    //strcpy(str, "hello");
}

看看 林锐 的 高质量C/C++编程指南

热点排行