C语言 字符串 编程 输入字符结束时赋值'\0'

#include<stdio.h>
int main(void){
int i,n,m;
char s[10];
printf("Enter a string:");
i=0;
while((s[i]=getchar())!='\n')
i++;
s[i]='\0';
for(n=0,m=i-1;n<m;n++,m--)
if(s[n]!=s[m])
break;
if(n>=m)
printf("It is a plalindrome\n");
else
printf("It is not a plalindrome\n");

return 0;
}

while语句循环结束后s[i]='\0'语句的效果是什么,不是整个数组变ASCII码0的字符了吗,干嘛要加这样一个语句

这是因为字符串是以‘\0'做为结束标志的。在内存中,比如字符串,“abc",实际上是四个字节的空间abc'\0'。
在你的程序中:
while((s[i]=getchar())!='\n')
i++;
s[i]='\0';
前面的while只是得到了字符串的字符,而没有结束标志。
如果没有最后一句s[i]='\0';
你的字符就不能正确结束。如果打印,可能是一大串的乱码。只看你字符串存储空间后面的是什么值。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-27
while((s[i]=getchar())!='\n')
      i++;   //这两句是完成数据输入,每输入一个,i就会加1,直到遇到输入回车符
      
s[i]='\0'; //一、这句不是while循环的内容,二、此功能为:将回车符变成字符串结束符(只是针对数组的某一位进行操作,而不是改变整个数组内容),你这个代码中可见,回车符不是你想要的数据,只是输入结束的一个判断值。

本回答被提问者采纳
第2个回答  2014-08-27
表示这个之后的字符都不是这个字符串的。
也就是说,整个字符串内容只是从开头到'\0'
比如:char s[10]="123";
printf("%s",s);//是123
s[1]='\0';
printf("%s",s);//是1
另外,如果'\0'之后还有其他字符,则全部忽略,这是一种策略,c风格字符串就是这样。
如果你忘了加(一般系统帮你加),程序会崩溃
第3个回答  2014-08-27
‘\0'是字符串结束符,字符串处理函数遇到该标志时,就会停止处理。
比如在这段代码中,输入abcda回车,s[5] = '\0'; 字符处理函数strlen(s) == 5,如果不置该值,这类函数就会异常,严重时,会系统崩溃。
相似回答