来自 PHP 背景,我习惯于编写返回字符串(或来自另一个函数的响应)的小函数,如下所示:
function get_something(){
return "foo";
}
但是,我是 C 的新手,我正在尝试弄清楚如何做一些像这样的真正基础的事情。
人们可以查看以下类似功能并告诉我它们有何不同以及哪个是最好/最干净的使用方式吗?
char *get_foo(){
char *bar;
bar = "bar";
return bar;
}
char *get_foo(){
char *bar = "bar";
return bar;
}
char *get_foo(){
char *bar = NULL;
bar = "bar";
return bar;
}
char *get_foo(){
return "bar";
}
这些功能之间有什么区别还是风格问题?
还有一点。如果我有两个函数,一个调用另一个,这样可以吗?
char *get_foo(){
return "bar";
}
char *get_taz(){
return get_foo();
}
更新:如果 get_foo() 未返回 const char*,这些函数需要如何更改?如果 get_foo() 调用另一个具有不同长度的 char* 的函数怎么办?
最佳答案
这四个是等价的,尤其是前三个——编译器很可能将它们编译成完全相同的代码。所以我会选择最后一个,因为它更小。
话虽如此 - 您返回的是 const char*,而不是 char*,因此这段特定代码可能会破坏所有内容,具体取决于您如何使用它(如果它完全编译,无论如何您都可以强制执行)。问题是,您正在返回一个指向字符串的指针,该字符串不是动态分配的,而是可执行镜像的一部分。所以修改它可能很危险。
作为一个更一般的规则,永远不要返回指向堆栈上分配的东西的指针(即不是使用 new 或 malloc 创建的),因为一旦函数结束,该变量的范围也会结束,被销毁,所以你得到指向无效(已释放)内存的指针。
关于c - 在 C 语言中,在一个小函数中声明并初始化一个变量或者只返回一个响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1092334/