读书人

C++指针类型转换有关问题求解(无法

发布时间: 2013-07-08 14:13:00 作者: rapoo

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++编程指南

读书人网 >C++

热点推荐