6

我需要对我要问的问题进行深入的技术解释,而不是解决方案。

我已经学习了一个星期的指针,我理解得很好。但是在编写程序时,我偶然发现了这个错误:

无法将参数 '2' 的 'const std::string' 转换为 'const char*' 到 'char* strcpy(char*, const char*)'</pre>

所以我很容易解决,string.c_str()没有任何问题。但我对为什么会这样很感兴趣。我一直在疯狂搜索为什么 const 字符串与constchar * 不同。当人们解释一个字符串时,他们说它与 char * 没有什么不同,那么为什么在字符串之前添加一个 const 不能使它成为 aconst char *呢?

4

1 回答 1

9

string一个用于保存文本数据(字符串)的对象,char*一个指向用于保存文本数据(字符串)的内存块的指针。

A string“知道”它的长度,但 achar*只是一个指针(指向一个字符数组)——它没有长度信息。因此,为了让您能够推断出由 a 表示的“字符串”的长度char*,您必须用一些特殊的东西来终止它,这通常是'\0'C中的空字符。

但是 astring并不会终止自身'\0'(这是无益的额外工作),所以问题就变成了:如果您需要在两种格式之间进行转换怎么办?

从 a 转换char*为 astring可以隐式发生 -string有一个专门用于此目的的构造函数。但是反过来,您必须告诉string对象以空值终止自身,并为您的目的提供一个有效的指针。(它不会隐含地这样做,因为它可能需要额外的工作和/或导致代码事故。)

于 2013-04-01T05:31:12.167 回答