当前位置: C语言 -- 附录 -- gets_s

gets_s函数


概要:
#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
char *gets_s(char *s, rsize_t n);

描述:

该函数从标准输入流中读取最多(n-1)个字符到参数s指向的数组,直至文件末尾或者遇到换行符。换行符会被丢弃,丢弃的换行符不计算在读取的字符数中,并在读取最后一个字符后自动向数组中添加空字符。

如果到文件末尾并且没有字符被读入数组,或者如果发生读取错误,函数将s[0]设置为空字符,并且数组s中其它元素的值是不确定的。

gets函数不同,如果输入行溢出存储缓冲,gets_s函数将其作为运行约束冲突。与fgets函数不同,gets_s函数在输入行和成功调用的gets_s函数之间保持一一对应的关系。使用gets的程序期望这种关系。


运行约束:

参数s不是空指针。参数n既不等于0,也不大于宏RSIZE_MAX。从标准输入流中读取n-1个字符时应出现换行符、文件末尾或者读取错误。

如果存在运行约束冲突,函数从标准输入流中读取并丢弃字符,直至读取到换行符、文件末尾或者发生读取错误,并且如果参数s不是空指针,将s[0]设置为空字符。


参数:
char *s

char类型指针,读取的字符将存储在其指向的数组中。

rsize_t n

指定读取字符的最大数量,读取字符的最大数量为(n-1)


返回值:

如果调用成功,函数返回s;如果存在运行约束冲突,或者如果到达文件末尾并且没有读取任何字符到数组中,或者如果在操作过程中发生读取错误,函数返回空指针。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
/*安全函数gets_s范例*/

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>

#define LENGTH 100

int main(void)
{
    char str[LENGTH];

    puts("Input a sentence:");
    if(gets_s(str, LENGTH) != NULL)
        puts(str);

    return 0;
}


结果:

假设输入内容为:

If you do not learn to think when you are young, you may never learn. -Edison

将输出:

If you do not learn to think when you are young, you may never learn. -Edison

注:使用Visual Studio编译。


相关内容:
fgets 从输入流读取字符串的函数。
gets 从标准输入流中读取字符串的函数。