【发布时间】:2018-02-15 20:27:33
【问题描述】:
为什么第一个函数返回字符串“Hello, World”,而第二个函数什么也没返回。我认为这两个函数的返回值都是未定义的,因为它们返回的数据超出了范围。
#include <stdio.h>
// This successfully returns "Hello, World"
char* function1()
{
char* string = "Hello, World!";
return string;
}
// This returns nothing
char* function2()
{
char string[] = "Hello, World!";
return string;
}
int main()
{
char* foo1 = function1();
printf("%s\n", foo1); // Prints "Hello, World"
printf("------------\n");
char* foo2 = function2(); // Prints nothing
printf("%s\n", foo2);
return 0;
}
【问题讨论】:
-
@Leushenko,不要这样想。这里的问题是关于函数的返回值,而不仅仅是
char[]和char *之间的区别。 -
我厌倦了这里的管理员积极宣布写得很好的新手问题是重复的。 OP知道足够的C以对自己有帮助的方式提出问题。 “翻译”以另一种方式提出的问题通常需要已经具备 OP 正在努力培养的技能。
-
A duplicate is not the same as a bad question,与其他近距离投票不同,这并不意味着用户的问题无效。对我来说这个q。是罕见的“upvote+close”组合的一个例子:这是一个很好的第一个问题,但它需要属于更大的“数组变量与指针”问题系列才能完全理解,答案背后的基本事实是会是一样的。
-
@verisimilidude - 这个想法是将所有相似的问题相互联系起来,应该可以帮助人们在一个地方找到所有好的答案。如果不出意外,这有助于 Google 确定应该将哪个帖子放在顶部。