簡體   English   中英

使用 strcat 獲取緩沖區溢出錯誤

[英]getting buffer overflow error using strcat

C++ 的新手,我一直在試圖了解指針和解決問題等復雜系統。 我制作了這個簡單的程序,它將連接 char 字符串。 但它總是拋出同樣的錯誤: L'buffer is too small &&0

這是我的代碼 -

    const char* str = "larry";
    const char* yo{"is one of the stooges" };
    size_t buffer{ std::strlen(str) + std::strlen(yo) + 1 };
    std::cout << buffer;
    char* buff = new char[buffer];
    strcpy_s(buff, strlen(str), str);
    strcat(buff, yo);
    std::cout << *buff << std::endl;
    delete[] buff; 

這是我的程序 output 按要求:

27             // the size of buffer

然后程序崩潰。

請指出有什么問題。 謝謝

根據 C 標准(K.3.7.1.3 strcpy_s 函數)

2 s1 和 s2 都不應是 null 指針。 s1max 不得大於 RSIZE_MAX。 s1max 不應等於零。 s1max 應大於 strnlen_s(s2, s1max) 重疊的對象之間不得進行復制。

那就是你必須寫

strcpy_s(buff, strlen(str) + 1, str);

否則str指向的字符串的終止零將不會被復制。 在這種情況下,下一個調用

strcat(buff, yo);

調用未定義的行為。

strcpy_s的第二個參數是目標數組的大小,包括0 字節。 但是,您傳入源字符串的大小,不包括0 字節。 strcpy_s嘗試復制它不能復制的 0 字節,因為據推測目標數組(如參數所示)太小。 buffer (不是一個好名字,順便說一句)作為第二個參數傳遞給strcpy_s以正確指示目標大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM