пользовательские строковые упражнения в с ++ - PullRequest
0 голосов
/ 18 января 2011

У меня есть собственный класс строки, который использует массив символов,

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 ++, и это моя первая попытка.

Ответы [ 3 ]

2 голосов
/ 18 января 2011

Ваш цикл, который копирует input в chars, не включает терминатор NUL. Измените условие цикла на j <= length, и оно должно работать.

2 голосов
/ 18 января 2011

Вы забыли поставить \0 в конце символов []. \0 - это символ, который ДОЛЖЕН быть помещен в конец последовательности символов. В противном случае ваша программа будет выводить некоторые случайные вещи (биты после вашего массива в памяти), пока не найдет \0.

1 голос
/ 18 января 2011

Я бы рекомендовал пару вещей:

  1. Вы не отменяете свои символы []
  2. вам нужно перегрузить оператор
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...