提问人:Noori Muhammed 提问时间:10/26/2023 更新时间:10/26/2023 访问量:93
在 C 中将 char 数组从函数返回给变量
returning an array of char from a function to a variable in C
问:
我正在学习 C,但是当我想将字符串从函数返回到 main 时遇到了一些问题。这是代码的一部分(我知道这是完全错误的,但我不知道如何让它做我想做的事)
我知道返回值(*name)只返回字符串的第一个字符的位置并将其传递给main。
int main(void)
{
char name[100] = {get_name("Name: ")};
printf("%s\n", name);
}
char get_name(char prompt[])
{
printf("%s", prompt);
char name[100];
scanf("%s", name);
return *name;
}
我认为不可能将整个字符串返回到 main 函数,这就是我使用指针的原因;但是我再也无法获得整个字符串了。我什至检查了 main 中数组的长度,它显示 100,但其中只有一个字符并且 name[1] 为空。
有人可以向我解释为什么它会这样以及如何修复它吗?我到处寻找,但找不到线索。
答:
当我想从函数返回字符串时,将 char 数组从函数返回到 C
中的变量
在 C 中,不能返回数组。可以返回指向数组的指针。
在 C 中,不能返回字符串。可以返回指向字符串的指针。
评论
以下是完成您想要的操作的方法 -- 代码按以下内容更新:
1.) name 数组在 get_name() 中声明为 static。
“当一个变量被声明为静态时,内存会分配给 程序的生存期。即使多次调用函数, 静态变量的空间只分配一次,值 上一个调用中的变量将传递到下一个调用中 函数调用。 信用:www.geeksforgeeks.org
...因此,“static”关键字允许我们将名称字符串返回给 main()
2.) get_name() 更新以返回 char 指针。现在它可以返回指向名称数组的指针。
请参阅我为每次更改添加到代码中的“更新”注释。
这是可运行的代码。
#include <stdio.h>
char *get_name(char prompt[]) /* Updated: returns char pointer */
{
static char name[100]="Billy"; /* Updated: static key word */
printf("%s", prompt);
scanf("%s", name);
return name;
}
int main(void)
{
char *name = get_name("Name: "); /* Updated: name variable is a pointer now */
printf("%s\n", name);
return 0;
}
这是另一个受用户@Gerhardh启发的解决方案。它使用动态分配的内存。当您准备好将您的技能提升到一个新的水平时,请检查它。动态内存分配对于任何编码人员来说都是一项关键技能。此处的可运行代码:
#include <stdio.h>
#include <stdlib.h>
char *get_name(char prompt[]) /* Updated: returns char pointer */
{
char *name= malloc(100); /* Updated: uses memory allocation. */
if(name) /* Was memory allocation a success? */
{
/* Answer: yes... we can proceed to use that memory: */
printf("%s", prompt);
scanf("%s", name);
}
return name;
}
int main(void)
{
char *name = get_name("Name: "); /* Updated: name variable is a pointer now */
if(name) /* Was memory allocation a success? */
{
printf("%s\n", name);
free(name); /* Free the allocated memory when you are done with it */
}
else
printf("Memory allocation failed!\n");
return 0;
}
评论
static
malloc()
评论
char name[100] = {some-char};