str[]="012345"
は
str[0]='0'
str[1]='1'
str[2]='2'
str[3]='3'
str[4]='4'
str[5]='5'
str[6]='\0'

だから6まで確保だと勘違いしてる人が多いみたいね。
宣言時の[]は配列だが、その後の[]は*(1*i)な。
単にポインタの位置、配列とは別物。
だから、char str[6];はナル文字込みでstr[5]までしか使えない。