同学有这样的功能:
char* Func( int a )
{
if( a == 0 )
return "yes";
else
return "no";
}
我知道返回一个本地字符*是未定义的,但是当我问他时他说过,因为"是"和"不"没有被声明为变量,它不是未定义的行为。
谁是对的?为什么?
答案 0 :(得分:1)
此处没有本地数组,显示的代码定义明确。
该函数只返回类型char
的指针,这里实际上只是返回一个字符串而不是对任何数组的引用。
char *func(int a)
{
char b[10];
char *p = b;
if( a == 0)
return p;
}
这里有一个错误,我认为编译器将报告/警告它,因为您返回对本地数组的引用。数组b
的生命周期就在func()
内,当您退出函数,数组不再有效。
答案 1 :(得分:-1)
你的代码工作正常,这是我试过的:
#include <stdio.h>
#include <string.h>
char* Func(int a)
{
if (a == 0)
return "yes";
else
return "no";
}
int main(int argc, char *argv[])
{
char a[5] = { 0, };
strcpy(a, Func(0));
printf("returned %s",a);
return 0;
}
这给出了输出:returned yes
和
#include <stdio.h>
#include <string.h>
char* Func(int a)
{
if (a == 0)
return "yes";
else
return "no";
}
int main(int argc, char *argv[])
{
char a[5] = { 0, };
strcpy(a, Func(1));
printf("returned %s",a);
return 0;
}
提供输出:returned no