Изменить: 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];
у вас будет случайный контент во всех элементах.