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