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

#include<stdio.h>intmain(void){inti,n,m;chars[10];printf("Enterastring:");i=0;while((... #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的字符了吗,干嘛要加这样一个语句
展开
 我来答
duanduan198011
2014-08-27 · TA获得超过718个赞
知道小有建树答主
回答量:382
采纳率:100%
帮助的人:337万
展开全部
这是因为字符串是以‘\0'做为结束标志的。在内存中,比如字符串,“abc",实际上是四个字节的空间abc'\0'。
在你的程序中:
while((s[i]=getchar())!='\n')
i++;
s[i]='\0';
前面的while只是得到了字符串的字符,而没有结束标志。
如果没有最后一句s[i]='\0';
你的字符就不能正确结束。如果打印,可能是一大串的乱码。只看你字符串存储空间后面的是什么值。
kaixingui2012
2014-08-27 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6178万
展开全部
while((s[i]=getchar())!='\n')
      i++;   //这两句是完成数据输入,每输入一个,i就会加1,直到遇到输入回车符
      
s[i]='\0'; //一、这句不是while循环的内容,二、此功能为:将回车符变成字符串结束符(只是针对数组的某一位进行操作,而不是改变整个数组内容),你这个代码中可见,回车符不是你想要的数据,只是输入结束的一个判断值。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
瓜娃子1598221
2014-08-27 · TA获得超过138个赞
知道小有建树答主
回答量:102
采纳率:0%
帮助的人:102万
展开全部
表示这个之后的字符都不是这个字符串的。
也就是说,整个字符串内容只是从开头到'\0'
比如:char s[10]="123";
printf("%s",s);//是123
s[1]='\0';
printf("%s",s);//是1
另外,如果'\0'之后还有其他字符,则全部忽略,这是一种策略,c风格字符串就是这样。
如果你忘了加(一般系统帮你加),程序会崩溃
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友adc6c55
2014-08-27
知道答主
回答量:4
采纳率:0%
帮助的人:7万
展开全部
‘\0'是字符串结束符,字符串处理函数遇到该标志时,就会停止处理。
比如在这段代码中,输入abcda回车,s[5] = '\0'; 字符处理函数strlen(s) == 5,如果不置该值,这类函数就会异常,严重时,会系统崩溃。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式