我是否正确地将PCWSTR指向字符串文字
Am I correctly pointing a PCWSTR to a string literal?
我对C++有点生疏,所以我正在寻求字符串指针问题的帮助。
首先,让我们考虑一些带有整数的指针基础:
void SetBob(int* pBob)
{
*pBob = 5;
}
int main(int argc, _TCHAR* argv[])
{
int bob = 0;
SetBob(&bob);
}
运行时,main()创建一个整数并将其地址传递给SetBob。在SetBob中,值(在pBob指向的地址处)设置为5。当SetBob返回时,bob的值为5。
现在,让我们考虑一个字符串常量:
typedef wchar_t WCHAR;
typedef const WCHAR *PCWSTR;
void SetBob(PCWSTR* bob)
{
*bob = L"Done";
}
int main(int argc, _TCHAR* argv[])
{
PCWSTR bob = L"";
SetBob(&bob);
}
运行时,main()创建一个PCWSTR,指向一个空字符串,并将其地址传递给SetBob。在SetBob中,PCWSTR指针现在指向一个Done字符串。当SetBob返回时,bob的值为"Done"。
我的问题是:
- 在调试器中,我看到在调用SetBob之后,bob字符串被设置为Done。但为什么这样做呢?在整数示例中,我为一个整数分配了空间,因此可以在该空间中存储一个值。但是,在字符串示例中,PCWSTR只是一个指针。这里的想法是字符串常量也在内存中,所以我只是指向那个常量吗
- 因为"Done"字面值在SetBob中,所以我是否必须担心,尽管指向了它,"Done"的内存可能会被回收?例如,如果我创建了一个WCHAR缓冲区,我会将"完成"复制到缓冲区中,这样我就不会担心了。但是,因为我指向的是函数中的一个文字,所以该文字是否会在函数结束后的某个时刻被破坏,让bob意外地指向任何东西
-
对于问题1,你只需给自己一个正确的答案。
-
对于问题2,它和问题1一样。您可以看到,在SetBob中,程序为字符串"Done"分配了一个空间(您可以将其视为"malloc"),然后将bob的指针设置为该字符串的地址。因此,在这一步中,属于字符串的内存被标记为"已使用",因此即使在函数结束时,它也永远不会被破坏。只有当你使用"免费"时,它才会永远留在你的记忆中。
相关文章:
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 如何使用字符串文字作为宏参数
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 构造<int>具有 2 个字符串文字的向量
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 方便地对C++中的所有字符串文字进行模糊处理
- 比较 std::string 和 C 样式字符串文字
- 如何从char16_t字符串文字中读取双精度?
- 如果我在块中编写字符串文字,是否会从数据部分复制整个字符串数据?
- C++ 不能在cout中使用向量和字符串文字
- 为什么必须将 const 添加到 constexpr 中才能进行字符串文字声明?
- C++:Unicode 字符串文字的可移植性
- 返回空字符串文字 VS. 返回空点 - 它们是一样的吗?
- 确保字符指针始终指向相同的字符串文字
- 如何按照 Google C++风格指南连接字符串文字?
- 通过 constexpr 中的 'const char *' glvalue 访问字符串文字的值会出错
- 字符串文字到 char 数组的转换如何在C++中实际工作
- 另一个字符串文字,UDL 迷宫
- strlen 是否针对字符串文字进行了优化?
- 用户定义的字符串文字为字符串null终止