c++学习(一):string/char[]/char* 是不是以'\0'结尾

从事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";

结果:

c++学习(一):string/char[]/char* 是不是以'\0'结尾_第1张图片

c++学习(一):string/char[]/char* 是不是以'\0'结尾_第2张图片

总结:

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” 的长度。

你可能感兴趣的:(c++学习)