在下面的代码中,函数返回一个未初始化的指针。
static abc* xyz(int a)
{
abc *z;
return(z);
}
如何修改此函数,以使此指针指向静态char数组。有任何建议请。
答案 0 :(得分:1)
如果我理解你的问题(有点奇怪,恕我直言),你想要的是什么( with VLA support )
static abc* xyz(int a) //int a is unused here
{
abc *z = NULL;
static char buf[sizeof(abc)]; //static char array
z = abc;
return z;
}
注意: FWIW,static
不是函数返回类型或值的“存储类”。这并不意味着该函数必须具有static
变量作为带有return
语句的表达式。
相反,这是函数定义的一部分(确切地说是声明 - 说明符),表示该函数具有内部llinkgae。换句话说,功能的可见性仅限于该特定翻译单元。
相关,来自C11
,章节§6.9.1,函数定义语法
函数的定义:
declaration-specifiers声明符声明列表 opt compound-statement
和
声明说明符中的存储类说明符(如果有)应为
extern
或static
。
然后,章节§6.2.2,第3段,
如果对象或函数的文件范围标识符的声明包含存储类说明符
static
,则标识符具有内部链接。
如果上述说明有意义,this related answer也会这样做,可能以更好的方式
在此笔记之后,我想您希望有一个更正的版本的上一代码,看起来像,
static abc* xyz(int a) //int a is unused here
{
abc *z = NULL;
//some code
z = malloc(sizeof(*z)); //sanity check TODO
//some more code
return z;
}
唯一的事情,一旦你完成使用它,你需要free()
返回的指针。
答案 1 :(得分:0)
您可以使用这样的静态局部变量:
static abc* xyz(int a){
static abc z;
return &z;
}