C语言static 加在字符数组中得到正确的字符串,static不加则不行,由于不明白原理,题目描述不是很准确?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *p(int n)
{

char s[] = "abcdefghij"; // 这个不能得到函数返回的字符串?这个就不会打印
// static char s[] = "abcdefghij"; //这个就可以打印
return s + n;
}
int main()
{
char *a = p(3);
printf("%s", a);
}
// 有无大佬讲解下是为什么

因为非静态局部变量是分配在栈中的,当函数调用返回后,这种局部变量的内存空间就释放了,所以变量的值就变成不存在了或无效了。

而静态局部变量是分配在数据储存区的,其内存在函数调用返回后并不会释放,所以函数调用返回后依然可以访问到这种变量的值。这种变量的内存要到程序退出时才释放。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-08-25
返回的地址必须再函数结束后还有效,而char s[] = "abcdefghij";在函数结束后,对象就不存在了。实际上你用static也不对,函数返回指针内容是不推荐的,一般建议把内存用malloc分配好通过参数传进去,如
char * p = (char*) malloc(100);
fun(p);

void func(char * p) {
strcpy(p,"abcde");
}
第2个回答  2021-08-25
看你的代码很规范,不像初学的样子,自己找找函数里的static的用法不就好了
第3个回答  2021-08-25

静态存储的变量的生存期是直到程序结束的

没有static修饰的局部变量,生存期在函数退出后就结束了

本回答被网友采纳
相似回答