[英]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.