gets ()(代表get string)函数对于交互式程序非常方便。它从系统的标准输入设备(通常是键盘) 获得个字符串。因为字符串没有预定的长度,所以gets ()需要知道输入何时结束。解决办法是读字符 串直到遇到一个换行字符(\n),按回车键可以产生这个字符。它读取换行符之前(不包括换行符)的所有 字符,在这些字符后添加一个空字符(\0),然后把这个字符串交给调用它的程序。它将读取换行符并将其 丢弃,这样下一次读取就会在新的一行开始。
/* name2.c --读取一个名字*/
#include <stdio.h>
#define MAX 81
int main(void)
{
char name[MAX];
char *ptr;
printf("Hi.what's your name?\n");
ptr=gets(name);/*把字符串放进name数组中 */
printf("%s? Ah! %s!\n",name,ptr);
return 0;
}
gets ()函数通过两种方式获得输入:
•它使用一个地址把字符串賦予name。
• gets ()的代码使用return关键字返回字符串的地址,程序把这个地址分配给ptr。注意到ptr是一 个char指针,这意味着gets ()必须返回一个指向char的指针值。
ANSI C要求Stdio.h头文件包括gets ()的函数原型。您不需要亲自声明这个函数,只须记住包含这 个头文件即可。但是一些C的旧版本要求您提供gets ()的函数声明。
gets ()函数的构造如下:
char *gets (char * s)
{
return (s);
}
这个函数头说明gets ()返回一个指向char的指针。请注意gets ()返回的指针与传递给它的是同一 个指针。输入字符串只有一个备份,它放在作为函数参数传递过来的地址中,因此程序澝单11.5中的ptr最后也指向name数组。gets ()函数实际的构造更复杂一点,因为它有两个可能的返回值。如果一切都顺利,它返回的是读入字符串的地址,正如我们上面所说。如果出错或如果gets ()遇到文件结尾,它就返 回一个空(或0)地址。这个空地址被称为空指针,并用stdiah里定义的常量NULL来表示。因此gets () 中还加入了一些错误检测,这使它可以很方便地以如下形式使用:
while (gets (name) != NULL)
这样的指令使您既可以检査是否到了文件结尾,又可以读取一个值。如果遇到了文件结尾,name中什 么也不会读入。这种一举两得的方法就比getchar ()函数所采用的方法简洁得多,getchar ()只返回一个 值而没有参数:
while ((ch = getchar ())!= EOF)
附带提一下,不要混淆空指针和空字符。空指针是一个地址,而空字符是一个char类型的数据对象, 其值为0。数值上两者都可以用〇表示,但是它们的概念不同:NULL是一个指针,而0是一个char类型 的常量。