我有一个使用字符数组的自定义字符串类
class MyString
{
private:
int length;
char *chars;
public:
MyString(const char* input)
{
length = 0;
while (input[length] != '\0')
++length;
chars = new char[length + 1];
for (int j = 0; j < length; j++)
chars[j] = input[j];
}
然而,当我使用带有简单输出的这个类时,我在控制台中得到一个奇怪的结果:
MyString newStr = "Test";
cout << newStr;
在控制台中给我这个输出:
Test═²²²²½½½½½½½½■ε■ε■ε■
这是使用Visual Studio 2010 Win32控制台应用程序。我真的不太了解c ++,这是我第一次尝试它。
答案 0 :(得分:2)
你忘了把\0
放在chars []的末尾。 \0
是必须放在char序列末尾的字符。否则,您的程序将输出一些随机内容(数组在内存中的位),直到找到\0
。
答案 1 :(得分:2)
将input
复制到chars
的循环不包括NUL终止符。将循环条件更改为j <= length
,它应该可以正常工作。
答案 2 :(得分:1)
我建议你做几件事: