【发布时间】:2018-01-23 21:22:07
【问题描述】:
char * concat(const char *s1, const char *s2) {
char result[70];
strcpy(result, s1);
strcat(result, s2);
return result;
}
int main() {
char *s1 = "Hello";
char *s2 = " World!";
char *s3 = concat(s1, s2);
printf("%s\n", s3);
return 0;
}
这个程序只调用concat 函数,它返回一个char *,它是s1 and s2 的concat。但是,在编译时,我收到错误address of stack memory associated with local variable 'result' returned。
所以我知道result 是 concat 函数中的一个局部变量,但并不是我们必须 malloc 它的真正原因。为什么不直接以 Hello World 的值返回结果?
如果你考虑这样的程序:
int ret() {
int a = 4;
return a;
}
int main() {
int b = ret();
printf("%d\n", b); // 4
return 0;
}
没有错误。我不必malloc int。 a 是本地的,但我仍然返回它,它仍然有效。
我想知道 concat 和 ret 的主要区别是什么,以及为什么 concat 必须动态分配内存。谢谢。
【问题讨论】:
-
有人愿意解释一下否决票以便我改进这个问题吗?
-
这个“Hello world”应该存储在哪里?
-
char *表示“指向字符的指针”,而不是“70 个字符的块” -
@MartinJames 好吧,OP 声称“我知道结果是 concat 函数中的局部变量”。这使得它比 dup 更“不清楚”。
-
我将它作为 dup 关闭,因为我有锤子 - 它更快。
标签: c string memory malloc dynamic-memory-allocation