能不能将NULL字节放入CString中?

没有什么不可以的。下面这个代码就工作得挺不错的。

CString str("123\0""567", 7);
ASSERT(str.GetLength() == 7);
ASSERT(str[3] == 0);
ASSERT(str[6] == '7);

在调试的时候用户只能看到NULL以前的内容,但在内存中NULL后面的内容确实存在。也可以进行赋值操作。下面的代码也可以正常运行:

CString str2;
str2 = str;
ASSERT(str2.GetLength() == 7);

也可以向这个代码后面加入一个字符,进行连接操作:

str2 += "9";
ASSERT(str2[7] == '9');

在连接中使用的是memcpy()而不是lstrcpy(),所以就可以了。

我们也可以使用另外的方法在字符串中插入NULL,如下面的代码:

CString str3("Hockey is best!");
ASSERT(str3.GetLength() == 15);
str3.SetAt(5, 0);
ASSERT(str3.GetLength() == 15); //仍然是15个字符

但不是说所有的CString成员函数都可以,在使用时一定要小心。