gpt4 book ai didi

c - 是全局内存中的局部常量字符串

转载 作者:太空宇宙 更新时间:2023-11-03 23:31:38 25 4
gpt4 key购买 nike

我是不是定义了一个全局指针(char*)。然后给出一个常量字符串的地址。是这个地址将被释放。例如:

static char *str;    
const char * test()
{
str = "hello world";
return str;
}

Q1:现在在任何地方使用test得到的地址内容是否安全?
Q2:如果test在DLL中。其他程序在外面使用是否安全
Q3:如果安全。当我将另一个 const 字符串重新分配给变量 str 时。旧的常量字符串会被释放吗

最佳答案

如果执行以下操作,则可以在任何地方使用 foo() 的结果。但是,您不应该修改或释放它。此代码是 DLL 还是库的一部分无关紧要。

const char * foo() {
return "hello";
}

// This is identical.
const char * foo() {
const char *x = "hello";
return x;
}

如果你想修改,你可以这样做。请注意,每次调用 foo() 都将引用同一 block 内存,因为 x 是静态的。注意这里,你可以修改x,但是你仍然不应该释放它。

char * foo() {
static char x[] = "hello";
return x;
}

如果您希望能够释放 foo() 的结果,您必须使用 malloc() 分配空间。

关于c - 是全局内存中的局部常量字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14027352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com