gpt4 book ai didi

字符指针和字符串

转载 作者:行者123 更新时间:2023-11-30 21:06:44 26 4
gpt4 key购买 nike

专家们,《Let us C》一书中给出了一个问题,其中作者要求编写给定程序的输出。该计划是-

#include<stdio.h>
int main()
{
char s[]="Churchgate: no church no gate";
char t[40];
char *ss,*tt;
ss=s;
while(*ss!='\0')
*tt++=*ss++;
printf("%s\n",t);
return 0;
}

当我在 gcc 编译器上尝试时,输出被核心转储。请解释原因。这里 ss 和 tt 是字符指针。这里我也不明白ss=s;这句话是什么意思?我的意思是我们不能直接复制字符串,除非我们逐个字符地复制它。而 ss 是一个字符指针,所以它指向一个字符,那么 ss=s 意味着什么?这是否意味着它将指向地址为 s 的 ASCII 值的字节?我也不明白这个说法*tt++=*ss++。我对此没有任何线索。请详细说明其含义。

接下来我不明白为什么使用 printf("%s\n",t) 就好像 t 是字符类型一样,但它没有根据程序存储任何内容。

最佳答案

首先是第一件事”数组名只不过是保存第一个元素地址的指针。所以,

char s[]="Churchgate: no church no gate";

这里 s 是指针名称。它保存字符串“C”的地址。现在您已经声明了另一个指针,它也是字符类型,即 ss。

所以,ss=s;意味着 s 也持有 s 持有的地址。

由于您没有存储任何内容,因此它将打印垃圾。同样,指针 tt 最初不存储任何地址(垃圾)。最后也是最重要的你不能执行这个操作:*tt++=*ss++;可能会向您显示所需左值的错误。

关于字符指针和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47368624/

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