【发布时间】:2014-11-15 01:23:27
【问题描述】:
类似这个问题:2d array, using calloc in C
我需要帮助初始化一个 2D 字符数组,该数组将全部初始化为某个值(在本例中为“0”)。我尝试了许多不同的方法,我正在拔头发。请让我知道我做错了什么。此代码不起作用。谢谢!
char** init_array() {
char newarray[5][10];
int i, j;
for (i = 0; i < 5; i++) {
for (j = 0; j < 10; j++) {
newarray[i][j] = '0';
}
}
return newarray;
}
char **array = init_array();
我尝试编译时从 gcc 得到的错误:
test.c: In function ‘init_array’:
test.c:12:2: warning: return from incompatible pointer type [enabled by default]
return newarray;
^
test.c:12:2: warning: function returns address of local variable [-Wreturn-local-addr]
test.c: At top level:
test.c:14:1: error: initializer element is not constant
char **array = init_array();
应该这样吗?
char newarray[5][10];
char** init_array() {
int i, j;
for (i = 0; i < 5; i++) {
for (j = 0; j < 10; j++) {
newarray[i][j] = '0';
}
}
return newarray;
}
char **array = init_array();
【问题讨论】:
-
不能返回本地数组,需要用
malloc动态分配。 -
或者将指针作为参数传递,然后您可以(1)在函数中对其进行操作(void类型行为)并(2)返回一个值(char**行为)
-
从函数返回后,newarray 将超出范围。在 init_array 中分配内存。
-
char**不与char[][]相同。 -
真的吗?我没有意识到这一点。我以为他们是一样的。
标签: c arrays initialization