指针问题,,不能够输出正确的结果

#include
#include
void getmemory(char **p)

{

*p=(char *)malloc(100);

strcpy(*p,"hello world");

}

int main( )

{

char **str=NULL;

getmemory(str);

printf("%s/n",*str);

free(str);

return 0;

}
不能输出正确的结果是为什么

char **str=NULL;//此处声明错误,应声明为char *str=NULL,否则就是在NULL上放指针地址,
如果想不变动其他代码,可以将NULL改成合法地址,但应该没人会那样写。
正确写法如下:
void getmemory(char **p)
{

*p=(char *)malloc(100);

strcpy(*p,"hello world");

}

int main( )
{

char *str=NULL;

getmemory(&str);

printf("%s/n",str);

free(str);

return 0;

}

我是想输出hello word的
使用指针的引用没问题,,可是指针的指针却不行

看你的代码其实不太懂二级指针的概念,百度搜搜吧。修改如下
void getmemory(char **p)
{
p=(char *)malloc(100);
memset(*p, 0, 100);
strcpy(*p, "hello world");
}
int _tmain(int argc, _TCHAR
argv[])
{
char *str=NULL;

getmemory(&str);

printf("%s/n",str);

free(str);

return 0;

}

你的代码写的有问题啊,感觉函数调用没有必要啊,完全是为了做试验才写的一个函数调用,并且二级指针是指针的指针,指针是存放变量地址的变量,建议你看下C Primer plus,里面讲的很清楚。

函数传参、指针问题。
getmemory(str);//传递的不是指针str所在内存位置地址值,而是str所在内存位置的值也就是NULL
接下来进入getmemory(str);,为空指针赋值肯定出错*p=(char *)malloc(100);

还有getmemory( );函数的本质是分配一个内存空间,并初始化,返回开辟内存空间的首地址。要实现返回函数的首地址可以用return指针,函数返回值为内存首地址来实现,
或者函数造作的输入值本事就是就是一个指向一块内存区域指针的指针,通过二级指针来把新开辟的内存地址存放(修改)在主程序开辟的一级指针,使主程序的指针指向子程序在堆上开辟的内存首地址~
所以主程序这样定义、取值是对的:
char *str=NULL;
getmemory(&str);
子程序的处理不需要改:

 void getmemory(char **p)
{
*p=(char *)malloc(100);
strcpy(*p,"hello world");
}