如何解决 C 中 gets() 函数的问题?
How can I fix the problem with gets() function in C?
gets
函数有问题。我写的第一个 gets
不工作,但接下来的工作正常。
我在开头放了一个额外的gets()
函数,程序直接跳过它并获取我想要的字符串。但它并不安全可靠。那么 gets 有什么问题,我该如何解决?
if (choice == 1) {
printf("Please enter an English phrase with upper case: ");
gets(a);
gets(engphr);
for (i = 0; engphr[i] != '[=10=]'; i++) {
正如 Eraklon 在他们的评论中提到的那样,最可能的原因是您在 gets
调用之前有一个 scanf
调用,并且之前输入的尾随换行符被 gets
在您有机会输入任何其他内容之前。
无论如何你都不应该使用 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
会在先前输入的输入流中留下尾随换行符,并且 fgets
将在看到该换行符后立即 return 。使用 fgets
读取所有输入并使用 sscanf
从输入缓冲区读取特定项目,或者使用 scanf
读取所有输入。
gets
函数有问题。我写的第一个 gets
不工作,但接下来的工作正常。
我在开头放了一个额外的gets()
函数,程序直接跳过它并获取我想要的字符串。但它并不安全可靠。那么 gets 有什么问题,我该如何解决?
if (choice == 1) {
printf("Please enter an English phrase with upper case: ");
gets(a);
gets(engphr);
for (i = 0; engphr[i] != '[=10=]'; i++) {
正如 Eraklon 在他们的评论中提到的那样,最可能的原因是您在 gets
调用之前有一个 scanf
调用,并且之前输入的尾随换行符被 gets
在您有机会输入任何其他内容之前。
无论如何你都不应该使用 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
会在先前输入的输入流中留下尾随换行符,并且 fgets
将在看到该换行符后立即 return 。使用 fgets
读取所有输入并使用 sscanf
从输入缓冲区读取特定项目,或者使用 scanf
读取所有输入。