【发布时间】:2015-01-26 02:15:27
【问题描述】:
让我说我有一个充满字符指针的结构。使用从函数返回的字符串初始化值的正确方法是什么
typedef struct details{
char *name;
char *address;
char *nickname;
}details_t
string function()
{
string name = "random string calculation";
return string;
}
案例1:
直接分配返回值。这里我不明白 string_1.c_str() 的结果存储在哪里。它是在堆中,因为它是字符串类吗?
main()
{
details_t details_t1;
details_t1.name = function().c_str();
details_t1.address = function().c_tr();
function_2(details_t1);
}
案例 2: 在堆中分配内存
main()
{
details_t details_t1;
details_t1.name = (char*)malloc(string_1.size()+1);
strcpy(details_t1.name,string_1.c_str();
....
function_2(details_t1);
}
【问题讨论】:
-
C 已经要求函数的显式返回类型已经有一段时间了...但是,我不建议使用
string_1.c_str(),因为从该函数返回的 C 字符串只保证存在,只要string_1存在。 -
你为什么还要在 C++ 程序中使用 C 风格的
char *字符串?只需始终使用std::string- 它会让生活变得更轻松。 -
“string_1.c_str() 的结果存储在哪里” - 结果是一个 const char*,它存储在你的结构中。但是,它指向的数据仍存储在
std::string中。因此,当字符串超出范围时,结构中的指针不会指向任何内容。 -
不可能在不知道你在用这个结构做什么的情况下给你明确的建议。
-
它确实有字符串的
c_str,它是C++