Работа с (char *) - C (СИ)
Формулировка задачи:
Здравствуйте.
При работе с (char *) появился вопрос, когда надо освобождать ресурс, а когда нет.
Понятно, что после malloc()/calloc()/realloc() необходимо вызывать free(), но если мы инициализируем указатель так:
то получается, это указатели на 2 строки, значение указателей в стеке, а содержимое строк в куче? После выхода из блока указатели уничтожаются, а выделенная под строки память разыменовывается автоматически? Почему в данном случае не нужно вызывать free()?
Могу ли я передать, например, строку str1 наружу?
Такая передача строки из функции func() безопасна? Или строка по указателю s может затереться при работе далее?
{ char *str1 = "string_1"; char str2[] = "string_2"; }
char *func() { char *str1 = "string_1"; return str1; // я возвращаю указатель на строку, но не будет ли затерта выделенная под строку память вне функции func()? } int main() { char *s = func(); }
Решение задачи: «Работа с (char *)»
textual
Листинг программы
char str1[10] = "abc"; // не можете char *str2 = "abc"; // можете char *str3 = malloc(10); // можете
Объяснение кода листинга программы
- Создается массив символов типа char с именем str1 и размером 10 элементов.
- В строку str1 записывается последовательность символов
abc
. - Создается указатель на char str2, который указывает на последовательность символов
abc
. - Создается указатель на char str3, который указывает на память, выделенную динамически для хранения 10 символов.
- В память, на которую указывает указатель str3, записывается последовательность символов
abc
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д