Починав писати швидше "між справою". а вийде може дуже корисним матеріалом. Просто виникло бажання в програмі використовувати два варіанти введення в символьний масив значень. Перший варіант з клавіатури, другий варіант з змінної. І обидва варіанти введення в одній програмі в один масив.
Взагалі коли ви оголошуєте змінну-масив типу char. то компілятор автоматично визначає потрібну довжину для роботи з таким масивом. При цьому все що є в масиві, все це залишається в пам'яті і хоч ви і не бачите цього, але вся рядок забита інформаційним сміттям. Багато книги про це пишуть, але разом з цим багато хто ігнорує показовий матеріал, який дасть зрозуміти що діється в символьному масиві насправді.
void full_S (char * S. int size) // Передача самої рядки і її розміру
cout <<“S = “ ;
for (int i = 1; i
void main ()
clrscr ();
const maxL = 256; // Розмірність для масиву
char S [maxL]; // Оголосили масив типу char
full_S (S. maxL); // Передача рядка і її розміру в функцію посимвольного виведення
getch ();
>
=================================
В принципі маленький і простий код. Усередині функції main () оголошується масив типу char. Якщо спробувати вивести цей масив як рядок (cout< Для виведення реальної рядки на екран була написана окрема функція full_S. яка займається посимвольним висновком реальних значень всього рядка.
Таким чином будь-хто може побачити реальну ситуацію роботи з символьним масивом. Хоча компілятор і виводить на екран чисту рядок, насправді це всього-лише ілюзорна чистота, і вся рядок може бути набита інформаційним сміттям. Дуже часто це перша причина помилок
У будь-якого хто зрозумів вищевикладене, може виникнути стандартне запитання: "Як же позбутися від цього непорядку". Відповідь дуже проста. Використовувати функцію очищення масиву або спорудити велосипед і написати свою.
Код C ++ Очищення масиву за допомогою memset
void full_S (char * S. int size) // Функція посимвольного виведення рядка за реальною довжині
cout <<“S = “ ;
for (int i = 1; i
void main ()
clrscr ();
const maxL = 256; // Розмірність для масиву
char S [maxL]; // Оголосили масив типу char
full_S (S. maxL); // Передача рядка і її розміру в функцію посимвольного виведення
memset (S. NULL. maxL); // Очистили рядок від сміття
full_S (S. maxL); // Передача рядка і її розміру в функцію посимвольного виведення
getch ();
>
=================================
Подивившись на функцію memset нескладно зрозуміти які параметри їй потрібні.
memset (Масив. Нульове значення. Розмірність масиву) При обробці символів в якості нульового значення можна використовувати ". але так можна переплутати куди слеш нахилений. Можна написати memset (Масив. 0. Розмірність) Але мені просто зручно вказувати NULL. тому я використав цей NULL в коді
Тепер сміливо можна писати програму для введення символьного масиву з клавіатури і перепрісваіванія в нього значення зсередини програми.
Код C ++ Вважати рядок з клавіатури і перепрісвоіть їй значення з строкової константи
#include
#include
void full_S (char * S. int size) // Передача самої рядки і її розміру
cout <<“S = “ ;
for (int i = 1; i
void main ()
clrscr ();
const maxL = 256; // Розмірність для масиву
char S [maxL]; // Оголосили масив типу char
full_S (S. maxL); // Передача рядка і її розміру в функцію посимвольного виведення
memset (S. NULL. maxL); // Очистили рядок від сміття
full_S (S. maxL); // Передача рядка і її розміру в функцію посимвольного виведення
cout <
full_S (S. maxL); // Символьний масив не містить сміття, вище було очищення
memset (S. NULL. maxL); // Перед перевизначенням значення рядка очищаємо її від усього
strcpy (S. "1"); // Надаємо рядку потрібне значення
full_S (S. maxL); // Перевірка показала, що масив не містить сміття
getch ();
>
=================================
Таким чином, потрібно стежити за тим щоб у рядку не було того чого не потрібно. Щоб символьний масив / рядок оброблялися краще, то перед занесенням туди інформації очищайте дані такого масиву від всякого інформаційного сміття. Написання зайвих рядків коду очищення масиву програму вам швидше за все не зіпсує, а ось уникнути можливих помилок повинно допомогти.
Адже при виконанні будь-якого циклу програміст піклується, щоб спочатку лічильник циклу був в первісному положенні, символьний масив вимагає точно такий же турботи.