Возможно, я просто дамп для поиска в Google, но я всегда думал, что массивы char получают только нуль, завершаемые литеральной инициализацией (char x[]="asdf";
), и немного удивлены, когда я увидел, что это, похоже, не так.Все ли массивы char автоматически заканчиваются на нуль?
int main()
{
char x[2];
printf("%d", x[2]);
return 0;
}
Выход: 0
В случае, если не массив, объявленный как размер = 2 * символ на самом деле получить размер 2 символов? Или я делаю что-то не так? Я имею в виду, что не редко используется массив символов как простой массив символов, а не как строка, или это так?
Я тоже об этом подумал, поэтому я попытался создать массивы разных размеров, а за массивом всегда следует 0. (0, показанное в моем примере, не сопровождалось 0, а массив с размером 3 * char в том же месте был) – user1329846
@ user1329846: Независимо от того, что хранится в памяти после окончания массива, до компилятора вы получаете 0, но можете также получить любое другое число, как говорит стандарт, если вы попытаетесь прочитать, что расположение всех ставок выключено. Позвольте мне сделать это ясно: даже если вам повезло, что вы всегда получаете 0s, ваш код по-прежнему вызывает неопределенное поведение_ и может выйти из строя в любое время. –
Спасибо, что не использовали 'что-нибудь может случиться, даже ваш компьютер может поджечь себя. Нет, не может. И все эти грандиозные примеры просто глупы. – jn1kk