[size=20.000000pt]2- [size=20.000000pt]【掌握】以字符串的形式输入和输出[size=14.000000pt]本小节知识点:
[size=14.000000pt]1[size=14.000000pt]、【掌握】以字符串的形式输入和输出
[size=20.000000pt]1[size=20.000000pt]、字符数组的输入输出[size=14.000000pt]使用的格式字符串为“%s”,表示输入、输出的是一个字符串。
[size=11.000000pt]1[size=11.000000pt])字符串的输出
[size=11.000000pt]在采用字符串方式后,字符数组的输入输出将变得简单方便。除了上述用字符串赋初值的办法外,还可用[size=11.000000pt]printf[size=11.000000pt]函数和[size=11.000000pt]scanf[size=11.000000pt]函数一次性输出输入一个字符数组中的字符串,而不必使用循环语句逐个地输入输出每个字符。
[size=14.000000pt]%s [size=14.000000pt]从给定的地址开始,输出字符直到遇到[size=14.000000pt]\0[size=14.000000pt]结束
[size=10.000000pt]分区 第十天([size=10.000000pt]@[size=10.000000pt]传智如意大师) 的第 [size=10.000000pt]470 [size=10.000000pt]页
[size=11.000000pt]注意在本例的printf函数中使用的%s,输出表列中给出数组名则可。不能写为:printf("%[size=11.000000pt]s",c[]);
[size=11.000000pt]2[size=11.000000pt])字符串的输入
[size=11.000000pt] char ch[10]; scanf("%s",ch); [size=11.000000pt]数组长度为1[size=11.000000pt]00[size=11.000000pt],因此输入的字符串长度必须小于1[size=11.000000pt]00[size=11.000000pt],以留出一个字节用于存放字符串结束标志`[size=11.000000pt]\[size=11.000000pt]0`。
[size=11.000000pt]从输出结果可以看出空格以后的字符都未能输出。为了避免这种情况,可多设几个字符数组分段存放含空格的串。程序可改写如下:
[size=12.000000pt]char [size=12.000000pt]st1[[size=12.000000pt]6[size=12.000000pt]],st2[[size=12.000000pt]6[size=12.000000pt]],st3[[size=12.000000pt]6[size=12.000000pt]],st4[[size=12.000000pt]6[size=12.000000pt]];
[size=12.000000pt]printf[size=12.000000pt]([size=12.000000pt]"input string:"[size=12.000000pt]);[size=12.000000pt]scanf[size=12.000000pt]([size=12.000000pt]"%s%s%s%s"[size=12.000000pt],st1,st2,st3,st4);
[size=12.000000pt]printf[size=12.000000pt]([size=12.000000pt]"your string: %s %s %s %s\n"[size=12.000000pt],st1,st2,st3,st4);
[size=11.000000pt]这是由于在C语言中规定,数组名就代表了该数组的首地址。整个数组是以首地址开头的一块连续的内存单元。
[size=11.000000pt]设数组c的首地址为2000,也就是说c[0]单元地址为2000。则数组名c就代表这个首地址。因此在c前面不能再加地址运算符&。如写作scanf("%s",&c);则是错误的。在执行函数printf("%s",c)时,按数组名c找到首地址,然后逐个输出数组中各个字符直到遇到字符串终止标志'[size=11.000000pt]\[size=11.000000pt]0'为止。
[size=11.000000pt]应该说明的是,对一个字符数组,如果不作初始化赋值,则必须说明数组长度。还应
[size=11.000000pt]该特别注意的是,当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的
[size=11.000000pt]结束符。
[size=10.000000pt]分区 第十天([size=10.000000pt]@[size=10.000000pt]传智如意大师) 的第 [size=10.000000pt]471 [size=10.000000pt]页
[size=20.000000pt]3-[size=20.000000pt]【掌握】字符串结束符使用
[size=14.000000pt]本小节知识点:
[size=14.000000pt]1[size=14.000000pt]、【掌握】字符串结束符[size=14.000000pt]2[size=14.000000pt]、【掌握】不使用或者不当使用结束符造成的问题
[size=20.000000pt]1[size=20.000000pt]、字符串结束符
[size=11.000000pt]在[size=11.000000pt]C[size=11.000000pt]语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。前面介绍字符串常量时,已说明字符串总是以[size=11.000000pt]'\0'[size=11.000000pt]作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符[size=11.000000pt]'\0'[size=11.000000pt]存入数组,并以此作为该字符串是否结束的标志。有了[size=11.000000pt]'\0'[size=11.000000pt]标志后,就不必再用字符数组的长度来判断字符串的长度了。
[size=11.000000pt]C[size=11.000000pt]语言允许用字符串的方式对数组作初始化赋值。例如:[size=11.000000pt]char c[]={'c', ' ','p','r','o','g','r','a','m'};
[size=20.000000pt]2[size=20.000000pt]、不使用或者不当使用结束符造成的问题[size=11.000000pt]1[size=11.000000pt])字符数组初始化时没有使用 [size=11.000000pt]'\0'
|
|