gpt4 book ai didi

c - 我刚刚读了指针和数组地址算术。但我已经搞混了

转载 作者:行者123 更新时间:2023-11-30 19:24:54 25 4
gpt4 key购买 nike

请您帮我理解指针。我刚刚阅读了指针和数组地址算术,所以我理解了递增指针指向的内容和递增指针指向的位置、将数组分配给指针和索引之间的区别。但我已经搞混了。

因此,在这本 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 没有空间容纳额外的零字节。所以 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com