Если вы явно задали длину строки равной 2, вы не оставляете место для терминатора NUL, который puts
использует для нахождения конца строки. Так как у вас его нет, он продолжит распечатывать содержимое памяти, следуя заданной вами строке, до тех пор, пока не попадет в байт в памяти, который содержит 0. 0. 1002 *
Чтобы избежать этого, обычно не следует указывать длину при создании строкового литерала:
char string[2] = "My"; // avoid this
char string2[] = "My"; // use this instead.