从函数返回字符串(C语言)

我试图以几种方式从函数返回字符串,但是没有成功。 每次我遇到相同的错误。 谢谢您的帮助。 代码:

strcpy(temp,get_name());
    printf("%s\n",temp);
    scanf("%d",&i);
}
free(name_list);/*free the allocation of memory*/
return 0;

}

char *get_name()


{
int i=0;
char the_chosen_name[MAX_STRING_SIZE];
int rand_name = rand() % NUMber_OF_STRING;
while (name_list[rand_name][i] != '\0')
    the_chosen_name[i] = name_list[rand_name][i];
the_chosen_name[i] = '\0';
//strcpy(the_chosen_name,name_list[rand_name]);
return the_chosen_name;

}

option 1

option 2

编辑: 用另一种方式: option3 WITHOUT A MORE VAR

name_list是字符串的全局数组

谢谢

cahdj123 回答:从函数返回字符串(C语言)

您是否将函数原型声明为:

int get_name();

如果是,请将其更改为

char* get_name();

您还有另一个问题: 您的程序返回一个本地数组。

使用类似

void get_name(char *the_chosen_name){
    strcpy(the_chosen_name,name_list[rand() % NUMBER_OF_STRING]);
}

或在使用后分配mallocfree

,

您收到的编译错误是因为调用代码缺少函数原型。

因此,在代码开始时,您需要添加以下函数声明:

char *get_name();

但是,除了此编译问题之外,您的代码还存在其他严重问题:您无法返回在堆栈上分配的缓冲区。 当对get_name的调用返回时,将回收缓冲区的内存。

您可以使用堆,即使用malloc为the_chosen_name分配缓冲区(并在以后释放),或者为函数提供要使用的缓冲区,该缓冲区由调用代码分配。 / p>

例如 都有

the_chosen_name = malloc(sizeof(char)* MAX_STRING_SIZE)

或将函数签名更改为以下形式:

void get_name( char *the_chosen_name)

,并且调用代码将在堆栈或堆上分配the_chosen_name变量。

本文链接:https://www.f2er.com/2878089.html

大家都在问