请您帮我理解指针。我刚刚阅读了指针和数组地址算术,所以我理解了递增指针指向的内容和递增指针指向的位置、将数组分配给指针和索引之间的区别。但我已经搞混了。
因此,在这本 K&R 书中,它解释了您可以修改指针以指向其他地方(我同意),但如果您将字符串常量的位置分配给指针,然后尝试修改字符串内容,则结果是未定义的。那么strcpy是如何工作的。
void strcpy(char *s, char *t)
{
while (*s++ = *t++)
;
}
如果 s 和 t 是指向数组地址的指针,那么我相信它是有效的,因为 s 和 t 指向数组,而不是字符串常量,并且在 s = t != '\0' 时向下递增 t。 我在这里尝试了指针,将两个数组分配给两个指针,然后使用 strcpy
main()
{
char array123[3] = "123";
char array4[2] = "44";
char *stringp1 = array123;
char *stringp2 = array4;
strcpy(stringp1, stringp2);
printf("%s", stringp1);
}
我遇到错误并拍摄了错误的图像:https://imgur.com/a/tXIKNmZ
所以我混淆了什么。我需要帮助。
最佳答案
char array4[2] = "44";
此处,array4
保存一个字符数组,但它不保存字符串。
array4
不是一个字符串。
char *stringp2 = array4;
好的,所以 stringp2
指向 array4
,一个不是字符串的字符数组。
strcpy(stringp1, stringp2);
不好。 strcpy
函数的第二个参数必须是要复制的字符串。
你想要这个:
char array4[3] = "44";
现在,array4
是一个字符串,因此 stringp2
指向一个字符串,因此作为源指针传递给 strcpy
是合法的。
关于c - 我刚刚读了指针和数组地址算术。但我已经搞混了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59606581/