char arr[5] = "geeks"; // ok
Само это утверждение не является UB.Он просто инициализирует массив символов (вместо строки).
Но когда вы начнете использовать его с чем-то вроде printf
, он станет UB:
`printf("%s", arr); // UB`
По вашему пункту 2) это, безусловно, UB, потому что вы получаете доступ за пределами
printf("%c",arrptr[7]); // UB