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]);
您有两个个问题:
strcpy
需要 char *
类型的目标参数。但是因为 message[0]
是一个 char *
,所以 &message[0]
是一个指向那个类型为 char **
的指针。换句话说,您传递了错误的指针作为目的地。这会导致 未定义的行为 。
第二个问题发生在你修复第一个问题时,那就是你必须记住文字字符串是不可修改的。它们实际上是只读的。然后您尝试将字符串复制到 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]);
我正在尝试使用 strcpy
函数将字符串复制到字符串数组,但它不起作用!
代码如下:
char *message[10] = { "Hello!000000000000", "Good Bye!", "1202", "hel", "beh", "cheshm" };
char *dst = "Copy";
strcpy(&(message[0]), "Copy");
printf("%s", message[0]);
您有两个个问题:
strcpy
需要char *
类型的目标参数。但是因为message[0]
是一个char *
,所以&message[0]
是一个指向那个类型为char **
的指针。换句话说,您传递了错误的指针作为目的地。这会导致 未定义的行为 。第二个问题发生在你修复第一个问题时,那就是你必须记住文字字符串是不可修改的。它们实际上是只读的。然后您尝试将字符串复制到
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]);