Во-первых, str
- это указатель, который указывает на "string"
. Компилятору разрешено помещать строковые литералы в места в памяти, в которые вы не можете писать, но можете только читать. (Это действительно должно было вызвать предупреждение, так как вы присваиваете const char *
для char *
. У вас были отключены предупреждения или вы просто проигнорировали их?)
Во-вторых, вы создаете массив, то есть память, к которой у вас есть полный доступ, и инициализируете его с помощью "string"
. Вы создаете char[7]
(шесть для букв, один для завершающего '\ 0'), и вы делаете с ним все, что захотите.