Прежде всего хочу сказать, что я новичок в C++
и это домашнее задание. Кроме того, я не уверен, что использую правильные определения в заголовке, поэтому поправьте меня, если я ошибаюсь.
Мне нужно создать строковый класс, в котором хранится содержимое массива символов с нулевым завершением. Если длина ввода больше 32, сохраните его в куче, иначе сохраните в стеке.
Сейчас я занят конструктором:
#include "SString.h"
#include <iostream>
using namespace std;
SString::SString(const char* input)
{
// Determine length of input
int length = 0;
while (input[length] != '\0')
{
length++;
}
// Check for zero length
if (length == 0)
{
st_string[1] = ' ';
}
// Based on length, make heap string or use stack string
if(length > 32)
{
int i = 0;
p_string = new char[length];
while (i != length) //write string with input
{
p_string[i] = input[i];
i++;
}
}
else
{
int i = 0;
while(i != length) //write string with input
{
st_string[i] = input[i];
i++;
}
}
cout << "saved string:" << endl;
cout << p_string << endl;
}
Теперь я проверил это, вызвав SimpleString с такой строкой в main:
SString("test"); // or something
Это работает, помещая строку либо в st_string
, либо в p_string
, но в обоих случаях сохраненная строка имеет больше (странных неопределенных) символов в конце. Итак, в случае «теста» я получаю тест № 54 или что-то в этом роде.
Я предполагаю, что это делает сохраненный массив символов больше, чем введенный массив символов, но я не понимаю, почему.