タイトルの通り,c言語において,配列の宣言時に要素数を明示しない配列について疑問があったので,質問させていただきました.
例えば以下の例において,

#include<stdio.h>
#include<string.h>

int main(){
  char text1[] = "I like you.";
  char *text2 = "###";

  printf("number of elements of text1 == %lu\n", sizeof(text1)/sizeof(text1[0]));
  strcat(text1, text2);
  printf("concatenated text1 == %s\n", text1);
  return 0;
}

で,結果が

number of elements of text1 == 12
concatenated text1 == I like you.###

となりました.
text1の要素数は,初期値の要素数+'\0'の分で,12個のchar型が確保されることが,上の結果の1行目からも分かります.しかし,strcat()で,text1に11個より大きい文字を格納しているにもかかわらず,エラーが出ずに,きちんと結果が出力されてしまいました.

これはどうしてなのでしょうか?定義された要素数を超えた配列の部分に格納しようとすると,

*** stack smashing detected ***:

のようなエラーが出るのかと思ったのですが...

もし何か分かる方がいらっしゃいましたら,教えていただきたいです.