字符串输入
如果想要把一个字符串读入程序,首先必须预留储存该字符串的空间,然后用输入函数获取该字符串。
分配空间
要做的第一件事就是分配空间,易储存稍后读入的字符串。前面提到过,这就意味着必须要为字符串分配足够的空间。不要指望计算机在读取字符串是顺便计算他的长度,然后再分配空间(计算机不会这样做,除非你比那些一个处理这些任务的函数),假设编写程序代码如下:
char *name;
scanf( "%s", name);
虽然会通过编译(编译器很可能给出警告),但是在读入name是,name可能会擦写掉程序中的额数据或代码,从而导致程序异常或终止。因为scanf()要把信息拷贝至蚕食指定的低智商,而此时该参数是个未初始化的指针,name可能会指向任何地方。
最简单的做法是在声明是显示知名数组的大小
char name[81];
现在name是一个已分配快(81 字节)的地址,患有一种方法试试在使用C库函数来分配内存。
不幸的get()函数在读取字符串是,scang()和转换说明%只能读取一个单词,可是在程序中通常尧都区郑航输入,而不仅仅是一个单词。gets(0)就用于处理这种情况。gets(0)函数简单易用,塔读取证行输入,直至遇到换行符,然后丢弃换行符储存其余字符,并在这些字符的末尾添加一个空字符使其成为一个C字符串。他经常与puts()函数使用,该函数用于显示字符串,并在末尾添加换行符
gets()的替代品
fgets和fputs函数
fgets函数通常通过第2个参数限制读入字符书来解决一出问题。该函数专门设计用于处理文件输入,所以一般请款下可能不太好使。fgets与gets的区别如下
1.fgets函数的第二个参数指明了读入字符的最大数量。若果该参数的值是n,那么fgets将读入n-1个字符,或者是遇到第一个换行符为止
2.如果fgets读到第一个换行符是,会把它储存在字符串中,这点与gets不同,gets会对其换行符
3.fget的第三个参数指明要读入的文件,如果读入从键盘输入数据,这一stdin (标准输入)作为参数,便是福定义在stdio.h中
gets()函数
1.只从标准输入中读取数据,所以不需要第三个参数
2.当读到最大字符数都没有读到换行,会执行以下几步。首先吧目标数组中的首字符设置为空字符,读取比你高丢弃随后的输入,直至读到换行符或文件的末尾,然后返回空指针。接着,调用以来实现的额“处理函数”,可能会终止或退出程序