运行下面的代码时,strcpy_s失败,"缓冲区太小",据说是指目的地,mem。 长度为100字节,显然不会太小。 有任何想法吗?
int main(int argc, char* argv[])
{
char* mem = (char*)malloc(100);
memset(mem, 0, 100);
strcpy_s(mem, strlen("hello"), "hello"); // <----- Assertion Fail
printf("%s\n", mem);
return 0;
}
答案 0 :(得分:8)
但您从未将100
传递给strcpy_s
方法。你通过了5(你好的长度)。事实上,由于复制“hello”需要6个字节(5加nul字节),因此假设缓冲区太小。
你必须传递缓冲区的大小作为参数。将字符串的大小传递给复制会使函数的整个使用无效。如果您传递要复制的字符串大小,您也可以使用strcpy
,因为它也会这样做。
答案 1 :(得分:3)
strcpy_s(mem, strlen("hello"), "hello"); // <----- Assertion Fail
应改为
strcpy_s(mem, 100, "hello");
参数2是目标缓冲区的大小,而不是源的大小。