Всегда необходимо выделять память из кучи под строки? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день. Сейчас читаю книжку "Understanding and Using C Pointers", которая целиком посвящена указателям и работе с ними. Дошел до главы по строкам. И ,вот, назрел такой вопрос: когда мы объявляем нечто подобное:
char *str = "string";
То получается, что это стринг литерал и хранится он в стеке. Так? И доступен он будет только внутри функции. Перетереть его случайно ничем нельзя будет? Ведь мы явно под него память не выделили. А если делать вот так:
char *str = (char*)malloc(strlen("string")+1);
То мы выделяем память из кучи и ссылаемся на нее. Получается, что после этого str будет доступна и вне функции, в которой мы ее объявили? Просто, путанница небольшая в голове. Может кто рассказать когда стоит выделять память, а когда можно обойтись:
char *str = "string";
?

Решение задачи: «Всегда необходимо выделять память из кучи под строки?»

textual
Листинг программы
char *str = "string";

Объяснение кода листинга программы

  1. Объявляется переменная типа char с именем str.
  2. Значение переменной str присваивается адрес строки string.
  3. В данном случае выделение памяти из кучи под строку не происходит, так как в языке C строки являются неизменяемыми и их память выделяется динамически во время выполнения программы.

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы