字符数组的输入与输出

来源:互联网 发布:广联达软件专用电脑 编辑:程序博客网 时间:2024/06/06 08:30

共三种方式:

1。使用格式控制符“%c”,逐个字符输入输出。

2。使用格式控制符“%s”,实现整个字符串输入输出。

在这里会有一种情况,即:scanf("%s",str);

                                           与scanf("%s",&str);

                                           与scanf(“%s”,&str[0]);结果都是正确的。http://hi.baidu.com/surfmygod/item/968c97863cd9205e26ebd9d1

这是因为scanf后面放的是变量的地址,在c语言中,数组名代表的就是该数组的起始地址。也就是在使用scanf("%s",str);的时候,实际上同样是在字符数组的第一个元素前面处开始记录值的,可以理解为s=&s[0]=&s.当然这个仅限于字符串数组,对于其他数据类型时是不可以的。

s与&s区别是类型不一样,s的类型为char *,&s的类型为char (*)[10],即指向一行有10个字符的指针。

在scanf("%s",&s);语句中,&s有一个隐含的强制类型转换,即相当于scanf("%s",(char *)&s);
在这里,还要注意scanf和scanf_s的区别:他们的关系与strcpy和strncpy的区别一样。

scanf在读取时候是不检测边界的,所以可能造成内存泄露,所以在vc2005和vc2008中提供了scanf_s,在调用时候必须提供一个数字,以表明最多读取多少位字符。。所以scanf_s只是提供了一个更加安全的机制,防止溢出。。变量地址后一定要跟一个数字,以表示其大小。。。

例如:wchar_t ws[10];

scanf_s("%s",ws,10);

3。调用gets()函数和puts()函数进行输入输出。。
gets(字符数组);例如:char str[80];
                        gets(str);
   说明:(1)从终端输入一个字符串到字符数组,输入正确时,返回值为字符数组的地址;输入失败时,返回NULL指针。
         (2)输入的字符串以换行符‘\n’为结束标记。在向字符数组赋值时,自动将'\n'转换为'\0',作为字符串的结束标记。
(2)(3)区别:scanf()函数不能完整读入带有空格字符的字符串,实际效果是把第一个空格前的字符串给存入了,后面的内容丢弃了。为解决这一问题可以使用gets()函数。
字符串处理函数:
#include"string.h"
字符串长度测试:strlen(字符数组);  返回值是字符串的实际长度,其中不包括结束符'\0'
字符串连接函数:strcat(字符数组1,字符数组2); 将2连接到1后面存放在1中,返回字符数组1的地址。
字符串复制函数:strcpy(字符数组1,字符串2); 作用是将2内容复制到1中。‘\0’也一同被复制到字符数组1.
字符串比较函数:strcmp(字符数组1,字符数组2); 从左到右逐个字符比较(按ASCII码值大小比较),直到出现不同字符或遇到‘\0’.相等返回0;                                         1>2返回正数;1<2返回负数。
              注意:比的是对应字符ASCII码值的大小,而不是长度。

原创粉丝点击