关于c语言当中空格\0的问题

#include<stdio.h>
int main()
{
char a[20];
char b[]="AVJKHGJSGJK\0NBSKJKSJD";
int i,k;
char *p=a;
char *q=b;
printf("Input 20 or less than 20 characters(\n->end):\n");
for(i=0;i<20;i++)
{
scanf("%c",&a[i]);
if(a[i]=='\n'){
break;
}}
printf("%s",q);
printf("%s",p);

getchar();
return 0;
}
我们知道当printf遇见\0也就是空格的时候会自动停止输出,也就是像printf("%s",q)打印的样子;
可是为什么用for(i=0;i<20;i++)
{
scanf("%c",&a[i]);
if(a[i]=='\n'){
break;
}}来输入一个字符串比如adasdw sd,在printf("%s",p)的时候依然打印的是adasdw sd,而不是遇见空格即停止输入?

\0不是空格。。。\0代表null,属于控制字符,空格是正常字符非控制符。
\32才是空格。

printf不是遇见空格后返回,它首先根据要打印的变量长度来决定什么时候返回,输出%s字符串,遇到\0返回,遇到空格不返回。

scanf遇到空格会返回,但空格后面的数据仍然在输入缓冲区,还可以取得。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-05-27
字符串的结束符是'\0', 所以printf("%s",q) 遇到是'\0'时输出结束。

字符串的结束符'\0'的ASCII值是0,空格的ASCII值是0x20.

用for(i=0;i<20;i++)
{
scanf("%c",&a[i]);
if(a[i]=='\n'){
break;
}}
输入 adasdw sd 的字符串的结束符在sd的后面,所以打印的是adasdw sd。空格是字符串的一部分,不是结束符。
第2个回答  2008-05-27
\0并不是空格,这个字符表示字符串的结束。
第3个回答  2008-05-27
%c 连 空格 一起吃了
相似回答