Как вы говорите, манипулирование этой строкой приводит к неопределенному поведению:
char *something;
something = "zzzzzzzzzzzzzzzzzz";
Если вам интересно, почему, см. «C Строковые литералы: куда они идут?» .
Если вы планируете манипулировать вашей строкой вообще (т.е. если вы хотите, чтобы она была изменчивой), вы должны использовать это:
char something[] = "skjdghskfjhgfsj";
В противном случае просто объявите ваш char *
как const char *
, чтобы указать, что он указывает на константу.
Во втором примере компилятор будет достаточно умен, чтобы объявить это как массив в стеке точного размера для хранения строки. Таким образом, размер этого ограничен вашим стеком.
Конечно, вы, вероятно, все равно захотите указать размер, так как это обычно полезно знать при работе со строкой.