C语言 - 返回一个数组
题目
如下函数是否存在问题?如果存在问题如何修改?同时简要阐述涉及的相关概念。
char *GetString(void)
{
char str[] = "hello"; //开辟一个能连续存放6个字符的数组,将“hello”字符串常量拷贝到数组中
}
简单几行代码,一眼就可以看出:这是一个C语言返回数组的问题。
直接使用上述代码运行的话,相信你会看到下面这句警告:
warning: function returns address of local variable
1.使用全局变量
#include <stdio.h>
char str[] = "hello"; //全局变量
char * GetString(void)
{
return str;
}
int main()
{
char *string = GetString();
printf("%s", string);
return 0;
}
使用全局变量的方式是不是我上面写的那样我也不是很清楚,不过经验证该代码可行。
2.使用静态局部变量
#include <stdio.h>
char * GetString(void)
{
static char str[] = "hello"; //静态局部变量
return str;
}
int main()
{
char *string = GetString();
printf("%s", string);
return 0;
}
经验证,该方法可行。
3.在函数内动态分配内存
#include <stdio.h>
char * GetString(void)
{
char *str = (char*)malloc(sizeof("hello")); //动态数组的内存分配
str = "hello";
return str;
}
int main()
{
char *string = GetString();
printf("%s", string);
return 0;
}
这种其实就是用指针传递数组,经验证可行。
4.在函数调用参数中传入数组地址
#include <stdio.h>
char * GetString(char *str)
{
return str;
}
int main()
{
char *string = GetString("hello");
printf("%s", string);
return 0;
}
这种方式我感觉是嵌入式开发比较常用的方法了,经验证可行!