关于C中的返回类型

关于C中的返回类型,c,C,我是C编程的初学者,我编写了一小段代码,如下所示: char* aFunction() { char aName[100] = "abc"; printf ("%s", aName); return aName; } int main (int argc, char** argv) { char* w = aFunction(); printf ("%s", w); } 当我编译和运行时,我得到的输出是“abc(null)”,但我期望的是“abcabc”。有

我是C编程的初学者,我编写了一小段代码,如下所示:

char* aFunction() {
    char aName[100] = "abc";
    printf ("%s", aName);
    return aName;
}


int main (int argc, char** argv) {
  char* w = aFunction();
  printf ("%s", w);
}

当我编译和运行时,我得到的输出是“abc(null)”,但我期望的是“abcabc”。有人能给我解释一下为什么w变量打印空值吗?我该如何解决这个问题,以便在main中调用printf并获得“abc”?换句话说,将aName的值传递给w变量的正确方法是什么?

您不能在函数中返回
aName
,因为它是从
a函数返回后丢失的局部变量

一个快速修复它的方法是像这样声明
aName
静态

static char aName[100] = "abc";

当你编译它时,你会得到一个警告

warning: function returns address of local variable
as
aName
是一个局部变量,其作用域在函数终止之前一直存在

您可以做的是,在函数中声明一个
char*
,为其分配内存,然后
从函数
affunction
返回它

一个例子-

char *aFunction() {
     char *aName;
     aName=malloc(3+1);
     if(aName==NULL)
          return NULL;
     strcpy(aName,"abc");
     printf ("%s", aName);
     return aName;
}


int main (int argc, char** argv) {
    char* w = aFunction();
    if(w!=NULL){
       printf ("%s", w);
       free(w);
    }
}

注意-请启用编译器警告。

另请参阅。此外,在编译时始终启用警告(例如,在gcc的情况下,
-pedantic-Wall
),当您尝试编译时,编译器没有给您任何警告吗?最好是
char*aName=“abc”