我试图以几种方式从函数返回字符串,但是没有成功。 每次我遇到相同的错误。 谢谢您的帮助。 代码:
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;
}
编辑: 用另一种方式: option3 WITHOUT A MORE VAR
name_list是字符串的全局数组
谢谢
答案 0 :(得分:1)
您是否将函数原型声明为:
int get_name();
如果是,请将其更改为
char* get_name();
您还有另一个问题: 您的程序返回一个本地数组。
使用类似
void get_name(char *the_chosen_name){
strcpy(the_chosen_name, name_list[rand() % NUMBER_OF_STRING]);
}
或在使用后分配malloc
和free
。
答案 1 :(得分:0)
您收到的编译错误是因为调用代码缺少函数原型。
因此,在代码开始时,您需要添加以下函数声明:
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
变量。