【问题标题】:Returning a const string from a function in C从 C 中的函数返回 const 字符串
【发布时间】:2013-06-18 19:04:56
【问题描述】:

我有以下代码:

const char * func_journey ()
{
    const char * manner = "Hello";

    manner = "World";

    return manner;

 }

 int main()
 {

     const char * Temp;

     Temp = func_journey();

     return 0;
 }

我在调试中运行它只是为了看看会发生什么,以某种方式从“Hello”更改为“World”,并且即使我已将其声明为 const,指针也发生了变化。

另一件事是,在运行结束时 Temp 是“世界”,现在怎么可能?方式是func_journey中的一个自动变量,它不应该在最后被销毁吗?

非常感谢。

【问题讨论】:

  • manner 是指向const char 的指针,如果您希望指针也为const 指针,则需要const char * const
  • 来自常见问题解答:stackoverflow.com/questions/890535/…
  • (不太确定)c 中的字符串是在第一个字符处具有引用的数组 .. 在所有初始化中,您将引用(指针)更改为另一个 ..
  • 是的,这正是发生的事情,指针被更改为已经预先初始化的字符串(“World”)。

标签: c string function


【解决方案1】:

我在调试中运行它只是为了看看会发生什么,不知怎么的方式从“Hello”变成了“World”

这正是您的代码要求它执行的操作,因此它完成了您的要求也就不足为奇了。

即使由于我已将其声明为const,指针也发生了变化。

您声明它是指向const 的指针,而不是const 指针(我知道,这听起来可能令人困惑)。当你写const char *时,表示指向的是const。如果要说指针本身是const,则需要

char * const manner = "Hello";

【讨论】:

【解决方案2】:

您的问题的答案分为两部分: 1)您已经声明了指向“const”的指针,而不是“const”指针(我猜你想要的)。 2) 为 "Hello" 和 "World" 分配的内存不在函数 func_journey 本地堆栈中,而是在全局只读内存位置中(查看如何分配字符串文字)。如果您使用 char 数组声明,则不会将“World”复制回 Temp。

【讨论】:

    猜你喜欢
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 2018-06-22
    • 2013-10-13
    相关资源
    最近更新 更多