我在这里找到了一个类似的问题和解决方案 - 从C中的函数返回一个局部变量
但想出了同样问题的另一个解决方案,并想请你评估它,它是否正确?
int myfunction (char **returnval) {
int isvalue = 0;
char *d;
d = "Lorem";
*returnval = d;
return isvalue;
}
int main(int argc, char **argv) {
int func_return;
char *myvar;
func_return = myfunction(&myvar);
printf("myvar=[%s]\n", myvar);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:myvar = [Lorem]
这段代码是否正确?由于功能范围,vars使用的内存不会丢失?
谢谢.
字符串文字是静态的,即用于保存字符的内存Lorem不用于在程序的持续时间内保存任何其他内容.因此,将地址返回到这样的字符串是安全的.
这和做的一样
const char* myfunction(void)
{
return "Lorem";
}
Run Code Online (Sandbox Code Playgroud)
这是完全正常和常见的事情,例如将enum值映射到符号字符串时:
typedef enum { Error_FileNotFound, Error_OutOfMemory, Error_PrinterOnFire } ErrorCode;
const char * error_code_to_string(ErrorCode error)
{
switch(errorCode)
{
case Error_FileNotFound:
return "Error_FileNotFound";
case Error_OutOfMemory:
return "Error_OutOfMemory";
case Error_PrinterOnFire:
return "Error_PrinterOnFire";
return "Unknown error";
}
}
Run Code Online (Sandbox Code Playgroud)
像这样的代码通常(在实践中)通过使用宏来实现case语句更加难以阅读.