C で
char hoge[4] = "data";
とすると末尾の '\0' は捨てられますか?
それともメモリ破壊起きますか?

あと C++ でも仕様は同じですか?
常に
char hoge[4] = {'d', 'a', 't', 'a'};
と描くべきですか?