【问题标题】:initializing a local variable to data-segment string将局部变量初始化为数据段字符串
【发布时间】:2015-03-15 14:14:45
【问题描述】:

c 中,假设我有以下代码:

int func(){
 char* s = "bla";
}

我不确定这是编译的。 由于s 不是静态的,它在func() 结束后无法生存,因此似乎指向“bla”的指针丢失了。 另一方面,程序应该仍然知道“bla”的地址,所以下次调用func() 时,s 将获得相同的地址。

我想知道上面的代码是否可以,或者我是否必须将s 声明为静态?

【问题讨论】:

    标签: c string initialization


    【解决方案1】:

    不清楚你将如何使用这个本地指针。然而,字符串文字的地址将是相同的。它不取决于函数将被调用多少次。此字符串文字具有静态存储持续时间。所以每次函数获得控制权时,指针都会被初始化为相同的地址。无需将指针本身声明为静态,除非您更改其初始值并希望在函数调用之间将其存储在指针中。

    【讨论】:

    • 所以,我从你的回答中了解到,程序确实记住了“bla”的地址,它可能是硬编码在将该地址放入 s 的指令中的文本段中。对吗?
    • @user1580025 字符串文字具有静态存储持续时间。它们的地址在程序执行期间不会改变。每次函数获得控制权时,函数中定义的本地指针都将使用字符串字面量的相同地址进行初始化。
    猜你喜欢
    • 2021-12-22
    • 2010-12-05
    • 2019-06-08
    • 1970-01-01
    • 2021-03-17
    • 2016-09-07
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多