sscanf 函式使用注意事項

2021-05-23 04:56:29 字數 821 閱讀 8019

在除錯** 時,發現使用 sscanf 函式的乙個問題,在以後使用該函式時要注意避免:

例如程式如下:

word dwvalue;

cstring strbuf;

sscanf(strbuf, "%d", &dwvalue);

呼叫 sscanf(strbuf, "%d", &dwvalue); 後,會為dwvalue賦值,卻影響了4個位元組的空間

可能像 sscanf(strbuf, "%d", &dwvalue) 這樣呼叫時,編譯器會將dwvalue當乙個int型的變數來賦值。

如果dwvalue接下來的兩個位址沒有被使用,程式還好,如果恰好被使用,將修改原有的記憶體值,影響程式的執行。

所有建議:以後使用的時候,對dwvalue變數定義為dword 或 int型別,就不存在該問題了。

後來同事指出,sscanf函式的使用注意:保持第二個引數和第三個引數的型別一致。

例如程式如下:

word

dwvalue;

cstring strbuf;

sscanf(strbuf, "%d", &dwvalue);

%d 或 %ld(l可省略) - 表示int或long型別 

word                - 表示short型別

所以此**中型別不一致,

應該將word改為dword或者int型別

或者將%d改為%hu或%hd

%hu - 表示unsigned short型別即word型別

%hd - 表示short型別

恍然大悟,原來把c語言基本語法都丟了。

看了還要常常溫習才行。

函式使用注意事項

目錄 函式使用注意事項 1.自定義函式 1 無引數,無返回值 2 無引數,有返回值 3 有引數,無返回值 4 有引數,有返回值 5 函式名不能重複 2.函式呼叫 1 呼叫的方式 2 呼叫時,要寫實參 3 呼叫時,實參的個數和先後順序應該和定義函式中要求的一致 4 如果呼叫的函式有返回值,那麼就可以用...

內聯函式使用注意事項

class tableclass inline int dec int getnum inline int tableclass getnum 上面申明的三個函式都是內聯函式。注意 1 在c 中,在類的內部定義了函式體的函式,被預設為是內聯函式。而不管是否有inline關鍵字。2 如果函式的定義放在...

swift 函式使用注意事項

import uikit 中的預設引數 在引數型別後加上 引數值 func teachcourse coursename string 語文 teachcourse 如果在呼叫函式時不傳引數,則使用預設引數 teachcourse coursename 歷史 如果有引數,則使用傳遞的引數 2.可變引...