【发布时间】:2016-05-25 14:48:17
【问题描述】:
我使用 C++ 已经有一段时间了,但有一个基本概念我无法理解。首先,我将列出将文本字符串分配给 char * 的两种方法。
方法一:
char * str = "Hello World";
方法二:
char * str = new char [12];
strcpy(str,"Hello World");
方法2我很熟悉。方法1是让我头疼的方法。我的问题是
- 这两种方法的根本区别是什么?有什么优点/缺点?
- 是否应该为方法 1 手动清理内存?
- 方法 1 中字符串的寿命是多少?只要指针仍然有效,我可以相信它会持续存在吗?我可以更改内容吗(前提是我没有在结尾处超出“\0”)?
我已经阅读了无数的 C++ 教科书和文章。他们都告诉我方法1有效,没有详细说明影响。我自己的实验并没有产生令人信服的结果。
谢谢(也许请原谅我的英语不好)
编辑: 实际上我在 VS2015 中使用带有 tchar 字符串的 WinAPI 进行编程,方法 1 可以完美编译。 std::string 在处理 Unicode 时很糟糕。
假设您在一个解决方案中有两个项目,一个使用 Unicode,另一个使用多字节,这两个项目使用同一个库。在这个库中,使用 tchar 很好。 std 字符串你必须明确告诉它是哪个版本。
我必须这样做,因为多字节项目是我需要注入另一个应用程序的 dll。 DLL 的 unicode 版本会导致应用崩溃,只有多字节版本有效。
【问题讨论】:
-
如果您尝试使用
C字符串,您将落后一分。 -
您忘记了第三个选项:
char str[] = "Hello World"。 -
请注意,方法 1 在 C++11 中是不允许的,它必须是
const char*。 -
绝对没有理由不使用
std::string。此外,尽管char *string = "string literal";在 c 中是合法的,但正如许多人评论的那样,这仍然是一个坏主意,因为字符串文字是只读的,写入只读内存将调用未定义的行为。