我需要对我要提出的问题进行深入的技术解释,而不是解决方案。
我已经学习了一个星期的指针,我理解得很好。但在编写程序时,我偶然发现了这个错误:
cannot convert ‘const std::string’ to ‘const char*’ for argument ‘2’ to ‘char* strcpy(char*, const char*)’
所以我很容易解决string.c_str()
没问题。但我对这是为什么非常感兴趣。我一直在疯狂地搜索为什么const字符串不是const
char *。当人们解释一个字符串时,他们说它与char *没什么区别,那么为什么在字符串之前添加一个const而不是const char *
?
答案 0 :(得分:3)
string
一个对象用于保存文本数据(字符串),char*
一个指针指向一个内存块用于保存文本数据(字符串)。
string
“知道”它的长度,但char*
只是一个指针(指向一个字符数组) - 它没有长度信息。因此,为了使您能够推导出由char*
表示的“字符串”的长度,您必须使用特殊的东西来终止它,这通常是C中的空字符'\0'
。 / p>
但是string
并没有以'\0'
终止(这是额外的工作,没有任何好处),所以问题就变成:如果你需要在这两种格式之间进行转换怎么办?
从char*
转换为string
可能会隐式发生 - string
只有一个构造函数用于此目的。但是反过来说,你必须告诉 string
对象为null终止自身并为你提供一个有效的指针。 (它不会隐含地这样做,因为它可能需要额外的工作和/或导致代码中的意外。)