C中二维数组的strcpy问题

strcpy problem with two dimension array in C

我正在尝试使用 strcpy 函数将字符串复制到字符串数组,但它不起作用!

代码如下:

char *message[10] = { "Hello!000000000000", "Good Bye!", "1202", "hel", "beh", "cheshm" };
char *dst = "Copy";

strcpy(&(message[0]), "Copy");
printf("%s", message[0]);

您有两个个问题:

  1. strcpy 需要 char * 类型的目标参数。但是因为 message[0] 是一个 char *,所以 &message[0] 是一个指向那个类型为 char ** 的指针。换句话说,您传递了错误的指针作为目的地。这会导致 未定义的行为

  2. 第二个问题发生在你修复第一个问题时,那就是你必须记住文字字符串是不可修改的。它们实际上是只读的。然后您尝试将字符串复制到 message[0] 指向的文字字符串中。尝试修改文字字符串 会导致未定义的行为。

第二个问题的解决方法是使用char的数组数组:

char message[][256] = { ... };

第一个问题的解决方法就是简单的通过message[0]:

strcpy(message[0], "Copy");

strcpy 调用的第一个参数不是 char 的可修改数组,它是 char* 的数组,产生类型不匹配和意外行为。

将代码修改为 strcpy(message[0], "Copy") 会导致另一个问题,因为您将尝试修改 message[0] 指向的字符串文字 "Hello!000000000000"

如果你只是想修改数组元素,只需使用简单的赋值来改变指针:

char *message[10] = { "Hello!000000000000", "Good Bye!", "1202", "hel", "beh", "cheshm" };
char *dst = "Copy";

message[0] = "Copy";
printf("%s", message[0]);

请注意 message 不是 3 维 数组。它是指向 char 的指针数组。您可以将其定义为具有相同初始值设定项的实际二维数组,并且内容可以修改:

char message[10][20] = { "Hello!000000000000", "Good Bye!", "1202", "hel", "beh", "cheshm" };
char *dst = "Copy";

strcpy(&(message[0]), "Copy");
printf("%s", message[0]);