Работа с (char *) - C (СИ)

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

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

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

Решение задачи: «Работа с (char *)»

textual
Листинг программы
char str1[10] = "abc"; // не можете
char *str2 = "abc"; // можете
char *str3 = malloc(10); // можете

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

  1. Создается массив символов типа char с именем str1 и размером 10 элементов.
  2. В строку str1 записывается последовательность символов abc.
  3. Создается указатель на char str2, который указывает на последовательность символов abc.
  4. Создается указатель на char str3, который указывает на память, выделенную динамически для хранения 10 символов.
  5. В память, на которую указывает указатель str3, записывается последовательность символов abc.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

7   голосов , оценка 4.286 из 5