相关疑难解决方法(0)

(字符串)文字的范围

我总是尽量避免返回字符串文字,因为我担心它们不是在函数之外定义的.但我不确定是不是这样.我们来看一下这个函数:


const char *
return_a_string(void)
{
    return "blah";
}
Run Code Online (Sandbox Code Playgroud)

这是正确的代码吗?它确实适用于我,但也许它只适用于我的编译器(gcc).所以问题是,do(string)文字有一个范围,或者它们是否一直存在/定义.

c string literals

29
推荐指数
3
解决办法
8114
查看次数

函数返回的字符串文字的生命周期

考虑以下代码:

const char* someFun() {
    // ... some stuff
    return "Some text!!"
}

int main()
{
   { // Block: A
      const char* retStr = someFun();
      // use retStr
   }
}
Run Code Online (Sandbox Code Playgroud)

在函数中someFun(),"Some text!!"存储的位置(我认为它可能在ROM的某个静态区域)以及它是什么范围 一生?

指向的内存是否会在retStr整个程序中被占用,或者在块A退出后被释放?

c c++ lifetime string-literals

25
推荐指数
3
解决办法
5435
查看次数

12
推荐指数
3
解决办法
2万
查看次数

C++ char array[] 内存泄漏

我创建了 char arr[] 并分配给它字符串文字

char arr[] = "some string";                  // arr occupies 12 chars in memory
std::cout << std::strlen(arr)  << std::endl; // lenght is 11 chars + 1 null-terminator
                                             //arr[11] is '\0'
Run Code Online (Sandbox Code Playgroud)

接下来我将空终止符放入 6 个元素

arr[5] = '\0';
std::cout << std::strlen(arr) << std::endl; // lenght is 5 chars  + 1 null-terminator
Run Code Online (Sandbox Code Playgroud)
  1. 是内存泄漏吗?
  2. 编译器如何知道它必须在第一个 '\0' 之后释放内存?(什么时候会删除变量arr)
  3. 是否可以更改此 arr 变量的长度并通知编译器在删除变量时应释放多少?

c++ memory

-2
推荐指数
2
解决办法
389
查看次数

标签 统计

c++ ×3

c ×2

lifetime ×1

literals ×1

memory ×1

performance ×1

string ×1

string-literals ×1