Редагувати: ОП (або редактор) мовчки змінив деякі одиничні цитати в початковому запитанні на подвійні лапки в якийсь момент після надання цієї відповіді.
Ваш код призведе до помилок компілятора. Ваш перший фрагмент коду:
char buf[10] ; buf = ''
є вдвічі незаконним. По-перше, в C немає такого поняття, як порожнє char
. Ви можете використовувати подвійні лапки, щоб позначити порожній рядок, як при:
char* buf = "";
Це дасть вам вказівник на NUL
рядок, тобто односимвольну рядок із лише NUL
символом. Але ви не можете використовувати одинарні лапки, якщо всередині них нічого немає - це не визначено. Якщо вам потрібно призначити NUL
персонажа, його потрібно вказати:
char buf = '\0';
Зворотна косої риси необхідно відмежовувати від характеру '0'
.
char buf = 0;
виконує те саме, але колишній - це думка менш неоднозначне для читання, я думаю.
По-друге, ви не можете ініціалізувати масиви після їх визначення.
char buf[10];
оголошує і визначає масив. Ідентифікатор масиву buf
тепер є адресою в пам'яті, і ви не можете змінити, куди buf
вказується точка призначення. Так
buf = // anything on RHS
є незаконним. Ваш другий та третій фрагменти коду з цієї причини незаконні.
Щоб ініціалізувати масив, потрібно зробити це під час визначення:
char buf [10] = ' ';
дасть вам 10-символьний масив, причому перший знак буде пробілом, '\040'
а решта - NUL
тобто '\0'
. Коли масив оголошується і визначається ініціалізатором, елементи масиву (якщо такі є) повз ті, з заданими початковими значеннями, автоматично додаються0
. Не буде "випадкового вмісту".
Якщо ви оголошуєте та визначаєте масив, але не ініціалізуєте його, як у наступному:
char buf [10];
у вас буде випадковий вміст у всіх елементах.