这个问题在这里已有答案:
char temp1[4] = "abc";
char *temp2 = "123";
strcpy(temp1,temp2);
如果我想将一个字符串文字复制到一个数组,它运行良好,但如果我以相反的方式做,我得到一个错误:
char temp1[4] = "abc";
char *temp2 = "123";
strcpy(temp2,temp1);
编译器的反馈是“Segmentation fault”。
那有什么不同呢?无论如何将字符串复制到字符串文字?
谢谢。
您需要了解这两行之间的细微差别
char temp1[4] = "abc";
char *temp2 = "123";
第一个创建一个4字符变量并将“abc \ 0”复制到它。
如果您愿意,可以覆盖它。你可以做到,例如temp1[0] = 'x'
,如果你想。
第二个创建一个指向常量文字“123 \ 0”的指针。 你不能覆盖它,它通常在内存中被声明为只读操作系统。
你所拥有的东西比字符串文字更复杂,你尝试做的事情不能被描述为“复制到字符串文字”。哪个好,因为复制到字符串文字实际上是不可能的。 (请原谅。)
首先,你在第一个代码引用中成功地做的是从字符串文字复制到大小为4的字符数组(你知道)。但是,您正在通过指向该字符串文字(temp2
)的指针进行复制的附加细节。另请注意,指针指向的不是可以以任何方式编辑的变量。它“只是链接器知道的字符串”。
在第二个代码引用中,您尝试将字符串(严格来说是一个以零终止的字符序列存储在数组中,temp1
,但不是字符串文字)复制到指向char(temp2
)指向的位置,但这不是一个合法写入的变量。
所涉及的变量的类型基本上允许这样的操作,但是在这种情况下它是被禁止的/不可能的;这会导致分段错误。
现在有可能也可能是你真正尝试的是将temp2
重新命名为temp1
开头的地址。我相信这就是给你想要的效果:
char temp1[4] = "abc";
char *temp2 = "123";
/* Some code, in which temp2 is used with a meaningful
initialisation value, which is represented by "123".
Then, I assume you want to change the pointer, so that it points
to a dynamically determined string, which is stored in a changeable
variable.
To do that: */
temp2=temp1;
/* But make sure to keep the variable, the name you chose makes me worry. */
请注意,数组标识符可用作指向数组条目类型的指针。