C语言—gets_s()

作者:追风剑情 发布于:2019-10-21 19:39 分类:C

C11新增的gets_s(),比fgets()少了第3个参数

示例

  1. //Visual Studio中加上这句才可以使用scanf()
  2. //否则只能使用scanf_s()
  3. #define _CRT_SECURE_NO_WARNINGS
  4. #include <stdio.h>
  5. #include <stdbool.h>
  6.  
  7. #define STLEN 10
  8.  
  9. char * s_gets(char * st, int n);
  10.  
  11. //argc: 参数个数 argv[]: 参数数组
  12. int main(int argc, char *argv[])
  13. {
  14. char words[STLEN];
  15. puts("Enter a string:");
  16. //C11新增的gets_s(),比fgets()少了第3个参数
  17. /*
  18. 1. gets_s()只从标准输入中读取数据,所以不需要第3个参数。
  19. 2. 如果gets_s()读到换行符,会丢弃它而不是储存它。
  20. 3. 如果gets_s()读到最大字符数都没有读到换行符,会执行以下几步。
  21. 首先把目标数组中的首字符设置为空字符,读取并丢弃随后的输入直至
  22. 读到换行符或文件结尾,然后返回空指针。接着,调用依赖实现的“处理函数”
  23. (或你选择的其他函数),可能会中止或退出程序。
  24. */
  25. //当输入字符越过STLEN-1时,会导致程序报错。
  26. gets_s(words, STLEN);
  27. puts(words);
  28.  
  29. system("pause");
  30. return 0;
  31. }
  32.  
  33. // 自己实现读取函数
  34. char * s_gets(char * st, int n)
  35. {
  36. char * ret_val;
  37. int i = 0;
  38. ret_val = fgets(st, n, stdin);
  39. if (ret_val) //即,ret_val != NULL
  40. {
  41. while (st[i] != '\n' && st[i] != '\0')
  42. i++;
  43. if (st[i] == '\n')
  44. st[i] = '\0';
  45. else
  46. while (getchar() != '\n')
  47. continue;
  48. }
  49. return ret_val;
  50. }

运行测试

测试1:输入未超长
11.png

测试2:输入超长
2222.png

标签: C语言

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号