这个char数组是否返回未定义的行为?

时间:2015-02-02 06:10:04

标签: c undefined-behavior

同学有这样的功能:

char* Func( int a )
{
    if( a == 0 )
        return "yes";
    else
        return "no";
}

我知道返回一个本地字符*是未定义的,但是当我问他时他说过,因为"是"和"不"没有被声明为变量,它不是未定义的行为。

谁是对的?为什么?

2 个答案:

答案 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