我在这里找到了类似的问题和解决方案 - returning a local variable from function in 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;
}
输出:myvar=[Lorem]
该代码是否正确? vars使用的内存不会因为函数作用域而丢失?
谢谢。
最佳答案
字符串文字是静态的,即用于保存字符 Lorem
的内存在程序运行期间不用于保存任何其他内容。因此,将地址返回到这样的字符串是安全的。
这和做是一样的
const char* myfunction(void)
{
return "Lorem";
}
这很好而且很常见,例如将 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";
}
}
像这样的代码通常(在实践中)通过使用宏来实现 case
语句来使其更加 DRY 变得更难阅读。
关于c - 从 C 中的函数返回一个局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8387087/