【发布时间】:2017-11-18 16:56:04
【问题描述】:
专家们在“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 是字符类型但它没有根据程序存储任何内容。
【问题讨论】:
-
tt没有指向任何地方...... -
也许你想要
tt=t;然后在最后*tt='\0' -
另外,缩进:(
-
此处的“警告”部分:stackoverflow.com/questions/562303/… 对您正在阅读的书说以下内容:
It is a horribly outdated book that teaches Turbo C and has lot of obsolete, misleading and downright incorrect material. -
注意:不会使用 ASCII。文字字符串由编译器使用execution character set 编码。
-fexec-charset.
标签: c string char char-pointer