字符串操作中,这些如\0的转义字符有什么用啊?

来源:百度知道 编辑:UC知道 时间:2024/06/21 09:06:09
字符串操作中,经常会遇到这类很恼火的问题,
1、\0代表字符串的结束,不算入字符串的长度,那我输入abcd\0efe,怎么结果测得字符串输出是abcd\0efe,长度为9?不是应该遇到\0就结束么?
2、为什么执行scanf语句的时候,输入完以后要点enter,相当于\n,为什么出现\n就结束呢?
3、为什么有时候还要将scanf输入后的\n吸收呢,用c=getchar()语句来吸收,这又是有什么用呢?
4、为什么输入几个字符串的时候,不能这样输入呢,如scanf("%s,%s,%s"),而只能这样scanf("%s%s%s"),然后输入的时候,第个字符串之间用空格或者点enter(即\n)或者tab键来隔开呢?
5、char str[100];
scanf("%s",str);
a=strlen(str);
printf("%d\n",a);
printf("%s\n",str);
对于这个程序段,如果我输入abcd\0cdd,结果输出abcd\0cdd,如果输入abcd\nadk,结果输出abcd\nadk,但是如果输入abcd cdd,中间那是空格,结果输出abcd呢?
我看过一些参考书,但是很少有人曾经总结过它们的使用方法,请哪位大侠,耐心得给我解释一下,我的问题可能有重复,就辛苦了,抽象点也没什么,但是回答要全一点
二楼的朋友说得我真是心酸,C是我大一学的,没好好学,现在到大三了才拾起来,没想到还是一个初学者,唉,只有努力了

我觉得这些问题,作为初学还是有点价值的,要是自己能思考至找到答案就更好了。
1、首先,你输入的\0是作为2个字符,即\和0,而'\0'则是一个字符。
例如 char c='\0';
例如 char s[]="abcd\0efe";实际上相当于
char s[10] = { 'a', 'b', 'c', 'd', '\\', '0', 'e', 'f', 'e', '\0'};
其中'\\'就是转义字符用来表示字符\。
类似的例如'\"'表示但引号",你试想一下例如输出printf("\"")就是输出一个单引号,但是printf(""")程序就会报错了,因为"不是成对出现的,它不知道做什么。
这下你知道转义字符的必要性了吧。

字符串都会以'\0'来表示结尾,
例如 char s[] = { 'a', 'b', 'c', '\0', 'd'};如果你printf(s)只会看到abc,因为遇到了'\0'的字符串结尾标志。
这下你知道字符串结尾标志'\0'的含义了吧.
2、执行scanf不止是遇到\n就结束,遇到tab键 空格键也会结束,这里却是没有那么多为什么。当然要是深究的话确实该了解该函数的本质。
3、因为有时候你不用getchar吸收的话,那个回车会被放到下一个要输入的地址中。我不知道你是否getchar函数的本意,吸收回车只是他的一个功能,它就是接受键盘任意字符,不止是回车,之所以用它来吸收回车,是因为要输入数据遇到回车就结束了,而这