关于C中的返回类型

时间:2015-10-16 11:49:40

标签: 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”。有人可以向我解释为什么w变量打印null吗?我如何解决这个问题,以便我可以在main中调用printf并获取“abc”?换句话说,将aName的值传递给w变量的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您无法在函数中返回aName,因为它是从aFunction

返回后丢失的局部变量

解决这个问题的一种快捷方法是像{

>那样声明aName静态

static char aName[100] = "abc";

答案 1 :(得分:1)

编译时会收到警告

warning: function returns address of local variable

因为aName是一个局部变量,其范围是在函数终止之前。

您可以做的是,在函数中声明char *,为其分配内存,然后从函数returnaFunction

一个例子 -

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);
    }
}

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