Изменить: OP (или редактор) молча изменил некоторые одинарные кавычки в исходном вопросе на двойные кавычки в какой-то момент после того, как я предоставил этот ответ.
Ваш код приведет к ошибкам компилятора. Ваш первый фрагмент кода:
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];
у вас будет случайный контент во всех элементах.