C prime plus s_gets 记录()-其他
C prime plus s_gets 记录()
1 char *s_gets(char *st, int n)
2 {
3 char *ret_val;
4 char *find;
5 ret_val = fgets(st, n, stdin); // 从stdin中读取n-1个字符
6 if(ret_val)
7 {
8 find = strchr(st, '\n'); // 查找换行符
9 if(find)
10 {
11 *find = '\0';
12 }
13 else
14 {
15 while(getchar() != '\n')
16 continue;
17 }
18 }
19 return ret_val;
20 }
以上是s_gets的原形
内部函数分析 :
fgets()
使用gets()时也可以完成输入 但是gets()不检查预留存储区能容纳的大小 所以 会发生内存越界,因此建议用fgets()
/**
* @brief fgets()函数获取一整行输入:
* 读取输入直达换行符(换行符也被读取),或者读到文件结尾,或者读取(n-1)个字符
* 读取完成后,再在读取内容末尾添加空字符'\0',使读取内容成为一个字符串
* @param str 指向一个字符数组,该数组存储了要读取的字符串。
* @param n 这是要读取的最大字符数
* @param stream FILE*指针,指明要读入的文件,如果是键盘输入,则以stdin(标准输入)作为参数
* @return char* 如果返回成功,则返回值与char* str参数相同,如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针
* 如果发生错误,返回一个空指针。
*/
char *fgets(char *str, int n, FILE *stream)
# include <stdio.h>
int main(void)
{
char str[20]; /*定义一个最大长度为19, 末尾是'\0'的字符数组来存储字符串*/
printf("please input:");
fgets(str, 7, stdin); /*从输入流stdin即输入缓冲区中读取7个字符到字符数组str中*/
printf("%s\n", str);
return 0;
}
输出的结果是6个字符串,还有一个是结束字符 \0.
s_gets所做的是将回车找出转换为字符串结尾标志\0 便于输出结果。
else中的意思是键盘输入若大于n-1 st存储了n-1个字符后 加上\n 就是一个字符串 此时在IO缓冲区中还存在着没被st存储的剩余字符 如果不处理这些字符 在下一次读取中 会从缓冲区中读出这些字符
————————
1 char *s_gets(char *st, int n)
2 {
3 char *ret_val;
4 char *find;
5 ret_val = fgets(st, n, stdin); // 从stdin中读取n-1个字符
6 if(ret_val)
7 {
8 find = strchr(st, '\n'); // 查找换行符
9 if(find)
10 {
11 *find = '\0';
12 }
13 else
14 {
15 while(getchar() != '\n')
16 continue;
17 }
18 }
19 return ret_val;
20 }
以上是s_gets的原形
内部函数分析 :
fgets()
使用gets()时也可以完成输入 但是gets()不检查预留存储区能容纳的大小 所以 会发生内存越界,因此建议用fgets()
/**
* @brief fgets()函数获取一整行输入:
* 读取输入直达换行符(换行符也被读取),或者读到文件结尾,或者读取(n-1)个字符
* 读取完成后,再在读取内容末尾添加空字符'\0',使读取内容成为一个字符串
* @param str 指向一个字符数组,该数组存储了要读取的字符串。
* @param n 这是要读取的最大字符数
* @param stream FILE*指针,指明要读入的文件,如果是键盘输入,则以stdin(标准输入)作为参数
* @return char* 如果返回成功,则返回值与char* str参数相同,如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针
* 如果发生错误,返回一个空指针。
*/
char *fgets(char *str, int n, FILE *stream)
# include <stdio.h>
int main(void)
{
char str[20]; /*定义一个最大长度为19, 末尾是'\0'的字符数组来存储字符串*/
printf("please input:");
fgets(str, 7, stdin); /*从输入流stdin即输入缓冲区中读取7个字符到字符数组str中*/
printf("%s\n", str);
return 0;
}
输出的结果是6个字符串,还有一个是结束字符 \0.
s_gets所做的是将回车找出转换为字符串结尾标志\0 便于输出结果。
else中的意思是键盘输入若大于n-1 st存储了n-1个字符后 加上\n 就是一个字符串 此时在IO缓冲区中还存在着没被st存储的剩余字符 如果不处理这些字符 在下一次读取中 会从缓冲区中读出这些字符