In the below piece of code, function returns an uninitialized pointer.
static abc* xyz(int a)
{
abc *z;
return(z);
}
How to modify this function, so that this pointer point to a static char array. Any suggestion please.
In the below piece of code, function returns an uninitialized pointer.
static abc* xyz(int a)
{
abc *z;
return(z);
}
How to modify this function, so that this pointer point to a static char array. Any suggestion please.
If I understood your question (little weird, IMHO) correctly, what you want is something like (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;
}
NOTE: FWIW, the static is not the "storage class" for function return type or value. It does not mean that the function has to have a static variable as the expression with return statement.
Rather, this is the part of the function definition (declaration-specifiers, to be precise), to indicate that the function has internal llinkgae. In other words, the visibility of the function is limited to that particular translation unit only.
Related, from C11, chapter §6.9.1, Function definitions Syntax
function-definition:
declaration-specifiers declarator declaration-listopt compound-statement
and
The storage-class specifier, if any, in the declaration specifiers shall be either
externorstatic.
then, chapter §6.2.2, paragraph 3,
If the declaration of a file scope identifier for an object or a function contains the storage-class specifier
static, the identifier has internal linkage.
If the above note makes sense, this related answer will also do, maybe in a better way
After this note, I think you would like to have a corrected version of the previous code, which looks like,
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;
}
only thing, you need to free() the returned pointer once you're done using it.
You can use a static local variable like this:
static abc* xyz(int a){
static abc z;
return &z;
}