簡體   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