use*_*erX 4 string constants char
我需要对我要问的问题进行深入的技术解释,而不是解决方案。
我已经学习了一个星期的指针,我理解得很好。但是在编写程序时,我偶然发现了这个错误:
无法将参数“2”的“const std::string”转换为“const char*”到“char* strcpy(char*, const char*)”
所以我很容易地解决了string.c_str()没有问题。但我对为什么会这样很感兴趣。我一直在疯狂地寻找为什么 const 字符串与constchar * 不同。当人们解释一个字符串时,他们说它与 char * 没有什么不同,那么为什么在字符串之前添加一个 const 不会使它成为一个const char *?
string是一个用于保存文本数据(字符串)的对象,并且char*是一个指向用于保存文本数据(字符串)的内存块的指针。
A string“知道”它的长度,但 achar*只是一个指针(指向字符数组)——它没有长度信息。因此,为了能够推断出由 a 表示的“字符串”的长度char*,您必须用特殊的东西来终止它,这通常是'\0'C 中的空字符。
但是 astring不会以'\0'(这是额外的工作没有任何好处)终止自己,所以问题就变成了:如果您需要在两种格式之间进行转换怎么办?
从 a 转换char*为 astring可以隐式发生——string有一个专门用于该目的的构造函数。但去其他方式,你要告诉的string对象为null,终止自己和给你一个有效的指针,你的目的。(它不会隐含地这样做,因为它可能需要额外的工作和/或导致代码事故。)
| 归档时间: |
|
| 查看次数: |
6134 次 |
| 最近记录: |