[英]C++ - strcpy_s() always fails even if copying just one byte to big buffer
感覺我一直用strcpy復制字符串沒有任何問題,但是我很久沒有這樣做了,現在無論我做什么都無法讓它工作。
我確定我遺漏了一些愚蠢的東西,但我對此感到沮喪有一段時間了,所以我來這里看看是否有其他人可以提供幫助。
const char* src = "Lalalala";
int strLen = strlen(src);
char* dest = new char[strLen + 1];
ZeroMemory(dest, strLen + 1);
strcpy_s(dest, strLen, src);
這段代碼向我拋出一個異常,說 lBuffer 太小了。 即使我嘗試只復制“一個字節”的數據,並分配一個 128 字節的緩沖區,它也會拋出相同的異常。
此外,我已經檢查過 strlen 返回預期值、分配和“ZeroMemory”函數調用工作正常,並且只有在運行 strcpy_s() 函數時程序才會崩潰。 我不知道這里發生了什么,請幫忙!
謝謝
strcpy_s
的第二個參數是numberOfElements
。 這是緩沖區大小,而不是字符串長度。
從MSDN :
numberOfElements
Size of the destination string buffer in char units for narrow and multi-byte functions, and wchar_t units for wide functions.
當您在上面的示例中調用strcpy_s
時,您將傳遞 8 作為緩沖區的長度,但strcpy_s
想要復制 9 個字符。 字符串的 8 個字符 + 1 個空終止符。 它看到緩沖區不夠大,並拋出。
嘗試傳遞strLen + 1
這是緩沖區的實際大小。 應該在那里工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.