tcscat在Debug和Release下的問題

2021-06-29 04:18:00 字數 875 閱讀 1788

背景

有如下這麼一段**,作用是獲取當前程式的所在路徑(c:\work\a.exe),然後將」a.exe」去掉,拼裝為」c:\work\inject.dll」

tchar szdllpath[max_path] = _t("");

tchar szexepath[max_path] = _t("");

getmodulefilename(getmodulehandle(null), szexepath, max_path);

int nindex = 0;

int i = lstrlen(szexepath);

while (i > 0)

i--;

}for (i = 0; i < nindex + 1; i++ )

_tcscat(szdllpath, _t("injectdll.dll"));

問題

1.debug模式下執行,得到的結果是預期的"c:\\work\\inject.dll"。

2.release模式下執行,得到的結果卻是"c:\\work\\",也就是_tcscat函式執行不成功。

結論

1.發現使用_tcscat可能存在風險問題,換用_tcscat_s就ok了。

2.自從vc2005開始,微軟力推_s安全版函式以取代不安全的標準非_s版函式,例如:strcat_s、strcopy_s、sprintf_s、_tcsnset_s、_tcsset_s、_tcstok_s...等等

3.**靜態走查是可以關注字串運算是否使用了_s安全版函式。

在VC中使用Debug

選定debug編譯選項 build set active configuration win32 debug 或者在build工具欄上的listbox中選擇debug。debug定義了 debug巨集,而release定義了ndebug巨集。先按f12編譯browse資訊 這樣編譯後可以查到變數定義...

在Eclipse中簡單的debug

在使用debug前,我們先熟悉一下快捷鍵8 ctrl shift b 開啟或者關閉斷點 ctrl alt b 開啟或跳過已存在的所有斷點 f5 進入當前執行的程式內部 從左往右數第五個鍵 f6 執行當前程式的下一行,不會進入到程式內部 從左往右第四個鍵 f7 跳出當前程式 從左往右第三個鍵 f8 執...

re模組和正則

正規表示式 就是用來篩選字串中特定內容的一串具有某種邏輯規則的字元組成。正規表示式不是python獨有的,而是一門獨立的技術,它在所有的程式語言中都有使用,在python中使用就必須依賴於re模組。正則的應用場景 比如,爬蟲,資料分析。正則的使用某些特定邏輯的字元構造的 可以簡化我們的 的冗餘。看以...