簡體   English   中英

C++ - 即使只將一個字節復制到大緩沖區,strcpy_s() 也總是失敗

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

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