c - 从 C 中的函数返回一个局部变量

标签 c

我在这里找到了类似的问题和解决方案 - 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/

相关文章:

c - 头文件和extern关键字

c - 我想要求用户输入 2 个字符,中间有一个换行符,但我失败了。

c - IBM DB2 native 库访问或小型 API

closedir()导致core dumped

java - 从包含最大和的整数数组中提取子数组的算法

c - Linux(Ubuntu),C语言 : Virtual to Physical Address Translation

C - 为什么指向指针的指针与指向数组的指针不同?

c - 堆栈溢出在 Linux 上静音?

c - c 中的 x -> y 是否与 c#/java 中的 x.y 相同?

c - 将非 ASCII 字符写入 tty 上程序的标准输入(通过 ssh)