繁体   English   中英

如何解决 C 中的 gets() function 的问题?

[英]How can I fix the problem with gets() function in C?

gets function 存在问题。 gets的第一个不工作,但接下来的工作正常。

我在开头放了一个额外的gets() function,程序只是跳过它并获取我想要的字符串。 但它并不安全可靠。 那么gets有什么问题,我该如何解决呢?

if (choice == 1) {
  printf("Please enter an English phrase with upper case: ");
  gets(a);
  gets(engphr);
  for (i = 0; engphr[i] != '\0'; i++) {

正如 Eraklon 在他们的评论中提到的那样,最可能的原因是您在调用gets之前有一个scanf调用,并且gets您有机会输入其他任何内容之前,来自先前输入的尾随换行符已被 get 消耗。

无论如何,您都不应该使用gets - 它已从 2011 版语言的标准库中删除。 使用它本质上是不安全的,并且在您的代码中引入安全漏洞。 请改用fgets 它的行为略有不同(如果有空间,它会将尾随换行符保存到输入缓冲区,在哪里gets丢弃),但它更安全:

if ( fgets( engphr, sizeof engphr, stdin ) ) // assumes engphr is declared as an array, not a pointer
{
  // process engphr
}

话虽如此,您真的不应该混合对scanffgets的调用,因为scanf会在输入 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ 中留下来自先前输入的尾随换行符,并且fgets将在看到该换行符后立即返回。 使用fgets读取所有输入并使用sscanf从输入缓冲区中读取特定项目,或者使用scanf读取所有输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM