Конструкция массивов означает, что любые неиспользуемые слоты удобно установлены на нулевой размер.
То, что вы написали, полностью законно и непротиворечиво.
Если бы вы точно определили размер буфера для "Hello, world!"
char test_cases[4][13]
Вы бы получили "сломанный" ответ и коснулись бы края UB.
Кроме того, поскольку вы объявили, что в качестве первого буфера он будет работать во втором буфере, поэтому даст неправильный ответ, а не некоторую фатальную ошибку.
На самом деле, глядя снова, поскольку вы определили вторую строку как пустую, вы ВСЕ ЕЩЕ не увидите ошибки, поскольку первый байт переполняющих данных, возможно, также заполнен нулями!
Возможно, я говорю, потому что {} без значения на самом деле НЕ является допустимым C. Это допустимый C ++ 11, но я не совсем уверен, должно ли поведение гарантировать, что все члены обнуляются, если C ++ 11 агрегированные инициализаторы «style». Фактически, из-за вашего вывода {}, должно быть, сделал "правильную" вещь.
Обычно в памяти так много нулей, что ваши строки обычно в конечном итоге завершаются! Как упомянул @Джон, у иностранцев есть возможность украсть деньги с вашего банковского счета.