2012-06-01 103 views
-2

讀書當我傳遞一個空字符串來sscanf,則返回零,並沒有改變給定的變量。sscanf的 - 從空字符串

char* ptr = ""; 
abc = sscanf(ptr, "%s", output); 
// abc == 0 

你能讓我知道如何解決它嗎?

+0

你期待什麼答案? –

+0

我期望輸出持有空 – Tamin

+4

郵政*真實* C代碼可以編譯與您所期望的輸出結果。 – Naveen

回答

5

sscanf等待第一個參數爲C字符串,該字符串函數作爲其源檢索數據。傳遞一個空字符串到這個函數不能讓你的變量被初始化,因爲這個函數沒有什麼東西會初始化它。

還要注意的是如果成功,函數返回的充滿變量的數目。如果發生匹配故障,此計數可以匹配預期的讀數數量或更少,甚至爲零。在任何數據可以被成功讀取之前輸入失敗的情況下,返回EOF。

下面的代碼,用MinGW的編譯器(gcc核心4.5.0-1)

char str[10]; 
int ret = sscanf("", "%9s", str); 
printf("%d\n", ret); 

輸出-1(EOF)

檢查sscanf是否成功的好方法是檢查它是否是返回值實際上等於提供的變量的數量。在這種情況下,它將是if (ret == 1)。雖然很多人只是檢查,大於0的值是否被退回,以確保事情已經閱讀並沒有發生錯誤。