以下程序将按预期在屏幕上打印“Hello\nWorld\n”('\n' = line down)。但实际上,据我所知,这里的某些事情并没有按应有的方式完成。“hello”和“world”字符串是在函数内部定义的(因此是本地的,它们的内存在函数作用域的末尾被释放——对吧?)。实际上,我们并没有像我们应该做的那样为它们做 malloc(在作用域之后保存内存)。所以当 a() 完成时,内存堆栈不是向上移动它的光标和“世界”将被放置在“你好”所在的同一位置的内存中吗?(看起来它在这里没有发生,我不明白为什么,因此,如果实际上内存块被保存并且在作用域之后没有返回,为什么我通常需要做这个 malloc?)
谢谢。
#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;
}
编辑:所以你实际上是在说我的“hello”字符串在内存中占据一个恒定的位置,即使它在一个函数中,如果我有它的地址,我可以从任何我想要的地方读取它(所以它的定义就像 malloc但你不能释放它) - 对吧?