Как заполнить массив символов (char)через цикл?

У меня есть массив char на 10 элементов. Как реализовать через цикл его заполнения?

Пример:

char one[14];
for(int i=0;i<14;i++){
cin>>one[i];
}
 one[14]//Oleg
//Вывод например имени который записался в этот масив 

Ответы (1 шт):

Автор решения: CSharpLooser

Сначала немного теории. В C++ тип char - это массив из кодом ASCII (насчет кодировки могу ошибиться) символов. Допустим мы объявили и инициализировали массив char с 6 символами:

char my_string[6] = "Hello";

"Под капотом" массив выглядит примерно так:

{72, 101, 108, 108, 111, 0}

В этом легко можно убедиться:

for (unsigned i = 0; i < 5; i++) {
    std::cout << static_cast<int> (my_string[i]) << "\n";
} // выведет числа выше, кроме 0

Насчет 0 стоит сделать ремарку - это символ окончания строки и при вводе/инициализации он неявно добавляется в конец массива.

Если вы хотите заполнить массив символами из консоли не посимвольно, а сразу строкой, то самый простой способ - это объявить массив типа char и заполнить его через std::cin :

char my_string[6]; // объявлияем массив char из 5 элементов (шестой - символ окончания строки)
std::cin >> my_string; // заполняем массив из консоли

for (unsigned i = 0; i < 5; i++) { // При вводе "Hello" выведет Hello
    std::cout << my_string[i] << "\n"; // А введенное слово посимвольно
} // запишется в массив my_string

Однако здесь кроется опасность. Поскольку в C++ длина данных массивов должна быть задана константной переменной во время компиляции (обычно это литерал), то вы не можете заранее предугадать длину введенного пользователем сообщения. А если сообщение будет больше, чем массив char, то сообщение обрежется, а в конце выполнения программы выдаст ошибку о повреждении стека памяти.

Простой и неэффективный способ избежать этого - объявить массив больше потенциального сообщения пользователя:

char my_string[255];

А вообще лучше использовать std::string для подобных целей:

std::string my_string; // объявление
std::cin >> my_string; // ввод
std::cout << my_string; // Вывод
→ Ссылка