题目
如下函数是否存在问题?如果存在问题如何修改?同时简要阐述涉及的相关概念。
1 | char *GetString(void) |
简单几行代码,一眼就可以看出:这是一个C语言返回数组的问题。
直接使用上述代码运行的话,相信你会看到下面这句警告:1
warning: function returns address of local variable
意思就是说,函数返回的是局部变量的地址!那我们都知道,局部变量的内存在函数结束后会被释放掉,所以上述代码返回的数组起始地址也没有意义了,因为即使你给了我地址,我也找不到地址原本指向的东西了。
那么我们应该怎么做才能确保程序正常运行呢?我在网上看到有以下几种解决方式,我们一一验证一下:
1.使用全局变量;
2.使用静态局部变量;
3.在函数内动态分配内存;
4.在函数调用参数中传入数组地址;
1.使用全局变量
1 |
|
使用全局变量的方式是不是我上面写的那样我也不是很清楚,不过经验证该代码可行。
2.使用静态局部变量
1 |
|
经验证,该方法可行。
3.在函数内动态分配内存
1 |
|
这种其实就是用指针传递数组,经验证可行。
4.在函数调用参数中传入数组地址
1 |
|
这种方式我感觉是嵌入式开发比较常用的方法了,经验证可行!