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

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");//这个虽然行了,不过折腾的得够呛;
                                    //而且你这么折腾有啥意义!!!
                                    //出错很正常呀;
                                    //因为这不是正常用法,所以很容易出错,
                                    //你这是给自己找麻烦吧!