共用方式為


警告 C28750

lstrlen 及其變體的禁用用法:'*function-name' 是禁用 API,用於改善錯誤處理目的。

這個警告表示正在使用已禁用的函式,且具有更強固或更安全的取代。 這個特定錯誤表示 lstrlen 或其變體的使用方式。

備註

lstrlen 函式及其變體是禁用的,因為它們無法傳輸例外狀況。 這可能會導致錯誤狀況在稍後發生,可能在不同的線程上發生。 這會使錯誤狀況難以診斷。 此外,對等的替代函式可由編譯程序優化,並避免例外狀況處理程式 (__try和__except區塊) 的效能額外負荷。

正確的緩和措施是使用更安全的字串長度函式 (通常是 strlen、wcslen、_tcslen) 。 不過,當您檢閱 lstrlen 變更時,您應該確認字串緩衝區來自受信任的程序代碼。 如果您正在處理不受信任的數據,您應該改為從 strlen 系列的函式切換至 strnlen 系列 (或 StringCchLength 系列) ,以確保它們不會超過不受信任的數據區塊界限。

請注意,不同於 lstrlen,任何取代專案都不會攔截例外狀況。 此外,lstrlen 會在取代時處理 NULL 指標,因此在將 lstrlen 取代為 strlen 或 strn (len 時,如果程式代碼) 中的 NULL 指標可能的話,則需要明確的 NULL 檢查。

您可以在下列範例之後找到此錯誤涵蓋的所有禁用函式清單,以及信任和不受信任數據 (的建議取代) 。

程式代碼分析名稱:BANNED_API_USAGE_LSTRLEN

範例

下列程式代碼會產生此警告:

int example_func(char* in)
{ 
    int size = lstrlen(in);
    return size; 
} 

這是因為使用 unsafe 函式 lstrlen。 若要修正此問題,我們可以使用 strlen 作為取代專案,請務必檢查指標是否為 NULL:

int example_func(char* in) 
{ 
    if (in != NULL) {
        int size = strlen(in);
        return size;
    }
    else {
        // handle error.
    }
} 

禁用函式

禁用 API 信任的數據取代 () 不受信任的數據取代 ()
lstrlen _tcslen _tcsnlen, StringCchLength
lstrlenA strlen strnlen, StringCchLengthA
lstrlenW wcslen wcsnlen, StringCchLengthW