方法一:
void get_memory(char **p, int num)
{
*p = (char *)malloc(sizeof(char) * num);
}
int main()
{
char *pointer = NULL;
get_memory(&pointer, 13);
strcpy(pointer, "hello, world!");
printf(pointer);
free(pointer);
return 1;
}
方法二:
char * get_memory2(int num)
{
char *p = (char *)malloc(sizeof(char) * num);
return p;
}
*************************************************************************************************************
上面的两个方法是行之有效的方法,下面的方法可能通过编译,或是运行,但不是最合理的。
*************************************************************************************************************
方法三:
char * get_string_array(void) { char p[] = "456789"; return p; // 编译出警告,会导致返回的p指针,指向的是垃圾。// 原因参照作者的另外一篇《c指针学习》。因为"456789"是静态数据区的一个拷贝,当p消失后,//可能所指向的静态数据区的拷贝块,就成了垃圾。系统输出的是一个笑脸。(20120329日添加) } char * get_string_pointer(void) { char *p = "123456"; return p; // 编译不会出警告,但是逻辑上该代码设计有问题。 } int main() { char * p = NULL; p = get_string(); printf(p); return 1; }
上面代码的设计思路是错误的,因为get_string_pointer()方法中,常量字符串在静态存储区,它在程序生命周期中恒定不变。无论什么时候调用该方法,它返回的只是个”只读“的内存块。