[英]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
}
话虽如此,您真的不应该混合对scanf
和fgets
的调用,因为scanf
会在输入 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ 中留下来自先前输入的尾随换行符,并且fgets
将在看到该换行符后立即返回。 使用fgets
读取所有输入并使用sscanf
从输入缓冲区中读取特定项目,或者使用scanf
读取所有输入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.