比如:char *f(){...},返回的那个char *比如说是一个字符串,那么这个字符串一定是在函数里的局部变量,在函数调用完后,该指针指的内存就废弃了,返回的指针其实就是没用的。但是在string.h 中,就有返回指针的函数,比如subString,那个是怎么做到得

这种方式叫做“用指针函数*creat()的返回值来传递动态内存”,这是一个C语法

首先你要注意,子函数*creat()用了malloc动态申请内存,而return返回的是指针变量所指向的地址,而不是指针!相当于将你所申请的动态内存返回给主函数

int *fun(void)//这里是指针函数
{
       int *p = (int *) malloc (int);//动态申请内存//p在这里指向了一块合法内存的地址
       return p;
}

void main(void)
{
      int *q = NULL;
      q = fun();//fun()返回指针p所指向的地址,(指针p是在栈上创建的,所以*fun()函数运行完,指针所分配的内存被系统自动释放)这时q指向p,得到了malloc所申请到的内存
   free(q);//释放动态内存
}

我知道,但是在C中,数组名和指针时同样的待遇,那为什么我那个例子中,char c1[]="hello";不能得到正常结果?其实我刚开始的问题问偏了,现在发现问题就是这个问题

我强调一遍是返回指针指向的地址,指针!指针!指针!,数组名和指针有同样的待遇???
你那数组名给我指个合法内存让我看看???

*p = "hello"这是常量字符串,从静态存储区分配,第一步字符串"hello"从静态存储区获取一块内存,然后指针变量p才指向这块静态内存,这块内存的特点是从程序开始到结束一直从在,所以可以返回。

c[] = “hello"是在栈上创建的,只要子函数fun()运行完毕,这块内存就自动被系统释放,怎么能给你返回呢???语法就是错误的!

malloc申请的内存是在堆上创建的

这是三种不同内存分配的方式