关于C中的返回类型
我是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”。有
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
asaName
是一个局部变量,其作用域在函数终止之前一直存在
您可以做的是,在函数中声明一个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”代码>