проверка размера массива символов c ++

0

У меня есть массив символов, который может содержать 1000 элементов (+1 для "\ 0"). Массив будет заполнен пользовательским вводом. Мне было интересно, есть ли способ проверить, является ли вход больше, чем массив может удерживать. Если я попытаюсь добавить его, программа столкнется, прежде чем я смогу сравнить его размер. Я думал о расширении массива и посмотрел, не меньше ли 1000 символов, но эта идея не кажется мне действительно хорошей.

РЕДАКТИРОВАТЬ:

im, используя std::cin.getline() чтобы получить вход от пользователя и не может использовать класс Sting

Теги:
validation

2 ответа

1
Лучший ответ

Я думаю, что один из способов проверить это - найти индекс \0 в вашем массиве. Если позиция равна или больше 1000, вы не должны добавлять к ней больше символов.

Если вы используете cin.getline() вы можете использовать переменную n чтобы указать максимальное количество символов, которые вы хотите

istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );

Здесь вы можете установить n=1001 (он также учитывает завершение char \0).

  • 0
    Я использую cin.getline() поэтому все входные данные немедленно сохраняются в массиве. Это не слишком важно, но это для задания, и мой проф любит обрезать 60% всего, что он может найти неправильно.
  • 0
    @JosipDorvak Вы можете просто использовать std::string .
Показать ещё 2 комментария
1

Короткий ответ: да.

Используйте std::string:

std::string line
while (std::getline(std::cin, line))
{
    // do something with line
}

Если вам не разрешено использовать std::string, вы можете либо поместить собственный собственный класс строк, либо просмотреть общие реализации std::getline и имитировать их (просто не сохраняя его в std::string).

  • 0
    Спасибо за предложение. Я знаю, что настоящая строка будет работать. Но наш проф не хочет, чтобы мы использовали строки. Действительно неудобно. Я просто слишком защищен, нет, он может «попытаться» переполнить массив
  • 1
    Конечно, он попытается переполнить массив. Это, наверное, один из основных пунктов этого задания.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню