我总是尽量避免返回字符串文字,因为我担心它们不是在函数之外定义的.但我不确定是不是这样.我们来看一下这个函数:
const char *
return_a_string(void)
{
return "blah";
}
Run Code Online (Sandbox Code Playgroud)
这是正确的代码吗?它确实适用于我,但也许它只适用于我的编译器(gcc).所以问题是,do(string)文字有一个范围,或者它们是否一直存在/定义.
考虑以下代码:
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退出后被释放?
例如
这些中最好的是:
std::string f() {}
Run Code Online (Sandbox Code Playgroud)
要么
const std::string& f() {}
Run Code Online (Sandbox Code Playgroud) 我创建了 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)