C语言 如何给二维数组的元素赋值?[已关闭]

nmpmafwu  于 2022-12-17  发布在  其他
关注(0)|答案(5)|浏览(175)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
13天前关闭。
Improve this question
我有一个二维的char数组(一个字符串数组),当我试图将一个字符串赋给一个元素时,出现了一个错误,说“数组类型'char *[8]'是不可赋值的”。
这是我的代码:

int main() {
    char array[4][8];
    array[0] = "test";
}

如何正确地分配二维数组的元素?

kg7wmglp

kg7wmglp1#

我有一个二维字符数组(字符串数组)。
这是我的代码:char *array[4][8];
这不是一个二维的字符数组,而是一个二维的字符指针数组。
要获取可用作字符串数组的二维字符数组,请执行以下操作

char array[4][8];  // i.e. without *

现在您可以保存4个字符串,最大长度为7。
C无法使用=赋值字符串。在C中,您可以使用strcpy将字符串复制到变量中,如下所示:

strcpy(array[0], "test");

但是,您可以使用=使用字符串初始化数组,如下所示:

char array[4][8] ={"test", "hello", "world", "done"};

例如打印如下:

for (int i=0; i < 4; ++i) puts(array[i]);

输出将为:

test
hello
world
done

数组的第二维可用于访问字符串的各个字符。例如:

printf("%c", array[1][4]);

将从hello打印o

ljo96ir5

ljo96ir52#

也许可以使用二维数组array[0][0] = "test;"
不过请注意,在您的例子中,这是一个指向字符串常量的指针的二维数组。由于字符串常量是只读的,因此应该声明为const char *array[4][8];。如果您需要读/写内存,则应该将指针分配给动态分配的内存。

h9vpoimq

h9vpoimq3#

int main() { 
    char *array[4][8];
    array[0] = "test";
}

在上面的代码中,你首先创建了一个char*的二维数组。错误发生在第二行。你试图给array[0]赋值,但是由于数组是一个二维数组,array[0]并不指向char*,而是指向一个char*数组。正确的方法是:

array[0][0] = "test";

这会将第一个数组中的第一个元素分配给“test”。

hmmo2u0o

hmmo2u0o4#

需要使用正确的数组下标,array[0]的类型是char *[8],但是需要char *类型的array[0][0],然后需要分配一个可写字符串,例如strdup()

#include <string.h>
// ...
char *array[4][8];
array[0][0] = strdup("test");
free(array[0][0]);

您还可以将类型更改为const,因为您无法更改该字符串文字:

const char *array2[4][8];
array2[0][0] = "test";

或者,您可能打算将数据复制到数组中:

#include <string.h>
//...
char array3[4][8];
strcpy(array3[0], "test");
jchrr9hc

jchrr9hc5#

错误可能是因为您指定了数组的行而不是列(请记住您使用的是二维数组)。
试试这个:

int main() {
    char *array[4][8];
    array[0][0] = "test";
}

相关问题