从事C++编程已经三年有余,至今仍有一些基础性的知识不是很清楚。工作学习之余,做一下总结。
问题提出:
工作中经常遇到
int paramname_offset = strlen( param_name.c_str() ) + 1;
CopyMemory((char*)pBuf, param_name.c_str(), paramname_offset);
为甚么在 strlen 后面要加1 呢? 下面来验证一下:
char a1[10] = "my";
char a2[] = "my";
const char* a3 = "ab";
std::string a4 = "my";
const char* a5 = a4.c_str();
std::string a6 = a2;
std::string a7 = a1;
std::string a8 = a3;
char a9[3] = "my";
char* a10 = "my";
结果:
总结:
1. const char* 字符串 以 “\0”结尾。
2. char[] 字符串 以 “\0”结尾。
3.string 字符串 不以 “\0”结尾。
4. char[n] = "string", 当string 长度+“\0”>n时,会因空间不足出错。
5.string.c_str() 转 const char* 时, 会在字符串末尾 自动补“\0”
6.char* 转string 时, 会自动把末尾的 “\0” 去掉。
7.strlen()是取字符串除去结尾符 “\0” 的长度。