Re: Запитання нуба, який сьогодні познайомився з C.
0xDADA11C7 написав:2. Як можна визначити кількість символів в цьому масиві? Тобто кількість елементів цього масиву?
sizeof(array)/sizeof(array[0])
Це тільки якщо array описано як масив фіксованої розмірності (описаний як тип array[число]). Якщо ж це масив невизначеного розміру (описаний як тип array[] чи тип *array), такий метод не годиться. В загальному випадку, розмір невідомий (що дає нам додаткові можливості прострелити собі ногу). У випадку рядка символів, можна застосувати функцію strlen(array), яка знайде кількість символів до кінцевого нуль-символа, що відмічає закінчення рядка.
В C немає понять "масив фіксованої розмірності" і "масив невизначеного розміру". Тут питання в тому, в який момент sizeof визначає розмір - це відбувається під час компіляції, а не під час виконання. тип *array - це вказівник на масив. Параметр функції тип array[] (а чи навіть тип array[розмір]) - це теж вказівник. А от змінна чи елемент структури тип array[] мають розмір, визначений компілятором, тому
char array[] = "bla";
printf("%d",sizeof(array)/sizeof(array[0]));
спокійно надрукує собі 4.
Ну і strlen іде до нуля, тому якщо прибрати нуль з рядка, може залізти далеко за область пам'яті, де починався масив, доки інший нуль не зустрінеться...