-5
我想在輸入來自用戶,因此用戶會這樣說 名年齡Age_of_brother Age_of_sister 這樣我就可以得到一個輸入像 「約翰·18」 或「約翰福音18 20」或 「約翰19 20 121」 任何類型的東西。 所以我知道我能做到 假設「命令[80]」有我的字符串sscanf的初學者使用C
sscanf(command, "%s%d%d%d", string, &int1, &int2, &int3);
,但我已經試過了,當我比較INT2或INT3爲NULL,它總是最終打印出一個隨機整數對於int2或int3,即使它被解除引用。那麼我該如何解決這個問題?
請發佈[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。我懷疑你通過將指向指向具有錯誤類型的對象的指針傳遞給'sscanf()':'%d'期望'int *'而導致* undefined behavior *,但是您可能正在傳遞'int **',因爲你寫了「即使它被解除引用「。請注意,'int3'不會受到影響,因爲沒有用於修改它的格式說明符。 – MikeCAT
檢查「int2或int3爲NULL」不是正確的做法。首先,因爲那些(可能)是int類型而不是指針。其次,如果沒有匹配,'sscanf'不會寫入它們。相反,您應該閱讀[sscanf手冊頁](http://linux.die.net/man/3/sscanf)以瞭解其運作方式。特別是關於返回值的部分:「這些函數返回成功匹配和分配的輸入項的數量,這可能少於規定的數量,甚至在發生早期匹配失敗的情況下甚至爲零。」 – kaylum
您的格式指定1個字符串和2個整數。您的參數列表似乎是傳遞1個字符串(char)指針和3個整數指針。它是什麼,你的格式表示2個整數,或者你的參數列表指示3個整數?就目前而言,'int3'不會受到'scanf'調用的影響。 –