Следующая программа будет печатать на экране «Hello \ nWorld \ n» ('\ n' = line down), как предполагалось. Но на самом деле, как я узнал, что-то здесь сделано не так, как должно быть. Строки «hello» и «world» определены внутри функции (и поэтому являются локальными, и их память освобождается в конце области действия - правильно?). На самом деле мы не делаем malloc для них, как мы предполагаем (чтобы сохранить память после области). Поэтому, когда выполняется a(), стек стека памяти не перемещается вверх, а «мир» будет помещен в память в том же месте, где было «привет»? (похоже, этого не происходит, и я не понимаю, почему, и поэтому почему мне обычно нужно делать это malloc, если на самом деле блок памяти сохраняется и не возвращается после области?)Должен ли я malloc возвращать строку внутри функции?
Thanks ,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *a()
{
char *str1 = "Hello";
return str1;
}
char *b()
{
char *str2 = "World";
return str2;
}
int main()
{
char *main_str1 = a();
char *main_str2 = b();
puts(main_str1);
puts(main_str2);
return 0;
}
редактировать: Так что вы говорите, на самом деле является то, что мой «привет» строка занимает постоянное место в памяти, и даже если он находится внутри функции, я могу читать его из любого места я хочу, если у меня есть его адрес (поэтому он определен как malloc, но вы не можете его освободить) - правильно?