我是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变量的正确方法是什么?
答案 0 :(得分:1)
您无法在函数中返回aName
,因为它是从aFunction
解决这个问题的一种快捷方法是像{
>那样声明aName
静态
static char aName[100] = "abc";
答案 1 :(得分:1)
编译时会收到警告
warning: function returns address of local variable
因为aName
是一个局部变量,其范围是在函数终止之前。
您可以做的是,在函数中声明char *
,为其分配内存,然后从函数return
中aFunction
。
一个例子 -
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);
}
}
注意 - 请启用编译器警告。