Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从函数返回字符串(c语言)_C_String_Return Type - Fatal编程技术网

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

从函数返回字符串(c语言),c,string,return-type,C,String,Return Type,我尝试用几种方法从函数返回字符串,但没有成功。 每次我都会犯同样的错误。 谢谢你的帮助。 守则: strcpy(temp, get_name()); printf("%s\n", temp); scanf("%d", &i); } free(name_list);/*free the allocation of memory*/ return 0; } } 编辑: 另一方面: name_list是字符串的全局数组 谢谢您得到的编译错误是因为调用代码缺少函数原型 因此,

我尝试用几种方法从函数返回字符串,但没有成功。 每次我都会犯同样的错误。 谢谢你的帮助。 守则:

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

}

编辑: 另一方面:

name_list是字符串的全局数组


谢谢

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

因此,在代码开始时,需要添加函数声明,如下所示:

char *get_name();
然而,除了这个编译问题之外,您的代码还有其他严重的问题:您不能返回在堆栈上分配的缓冲区。 当get_name调用返回时,将回收缓冲区的内存

您可以使用堆,即使用malloc为所选名称分配缓冲区并在以后释放它,或者为函数提供一个要使用的缓冲区,一个由调用代码分配的缓冲区

e、 g。 要么有

the_chosen_name = malloc(sizeof(char)* MAX_STRING_SIZE)
或者将函数签名更改为如下内容:

void get_name( char *the_chosen_name)

调用代码将在堆栈或堆上分配\u selected\u name变量。

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

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后使用它进行分配。

静态方法存在一些问题。。。但是试试静态字符选择的名称[最大字符串大小];_choosen_名称在堆栈上。您不能返回指向它的指针。要么使用static,要么从malloc获取它的内存。get_名称应该在其使用之前声明,也就是在其调用方之上声明。您的代码片段没有意义,它们不完整。谢谢。这个函数必须什么也得不到我用分配器添加了另一个代码你声明了原型了吗?如果有,你能把申报单放在这里吗?如果不是,则应将其声明为char*get_name;我已经编辑了答案,您需要在源文件的开头添加函数声明。但除了编译错误之外,代码将无法工作,因为您无法从堆栈返回缓冲区
void get_name(char *the_chosen_name){
    strcpy(the_chosen_name, name_list[rand() % NUMBER_OF_STRING]);
}