Я имею дело с динамическими массивами в C++. Справка по следующему коду.увеличить массив с char * [C++]
Я пытаюсь прочитать символы один за другим и сделать C-строку. Если размер массива недостаточен, я его увеличиваю. Но функция IncreArray работает с ошибкой и возвращает строку с другими символами. Что я не так?
void increaseArray(char* str, int &size){
char* newStr = new char[size * 2];
for (int i = 0; i < size; i++){
newStr[i] = str[i];
}
size *= 2;
delete[] str;
str = newStr;
}
char* getline()
{
int size = 8;
char* str = new char[size];
char c;
int index = 0;
while (c = getchar()) {
if (index == size) increaseArray(str, size);
if (c == '\n') {
str[index] = '\0';
break;
};
str[index] = c;
index++;
}
return str;
}
Это "str = newStr;" устанавливает локальную переменную str в newStr. Эта локальная переменная немедленно отбрасывается. Вам нужен указатель на указатель или ссылка. –
Почему бы вам не использовать 'std :: string' или даже' std :: vector '?? –
Walter
_ «Я пытаюсь прочитать символы один за другим и сделать C-строку. Если размер массива недостаточен, я увеличиваю его». Буквально для чего используется 'std :: string'. Почему бы вам не использовать его и избавить себя от неприятностей? Ваш код не будет проходить проверку в моей команде. –