专家在“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是字符类型但是根据程序没有存储任何内容。
答案 0 :(得分:0)
首先要做的事情' 数组名称只是保存第一个元素地址的指针。 所以,
char s[]="Churchgate: no church no gate";
这里是指针名称。它保存了字符串'C'的地址。 现在你已经声明了另一个指针,它也是一个字符类型,即ss。
所以,ss = s;也就是说ss也持有s所持有的地址。
因为你没有存储任何东西所以它会打印垃圾。类似地,指针tt最初不存储任何地址(垃圾)。 最后也是最重要的 你不能执行这个操作: * TT ++ = * SS ++; 可能会显示lvalue recquired的错误。