[英]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.