当运行下面的代码时,strcpy_s失败,"Buffer is too small",据说是指目的地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;
}
Run Code Online (Sandbox Code Playgroud)
但是你从未将其传递100给strcpy_s方法.你通过了5(你好的长度).事实上,由于复制"hello"需要6个字节(5加nul字节),因此假定缓冲区太小.
您必须将缓冲区的大小作为参数传递.将字符串的大小传递给复制会使函数的整个使用无效.如果你传递字符串的大小来复制你也可以使用,strcpy因为它会做同样的事情.
strcpy_s(mem, strlen("hello"), "hello"); // <----- Assertion Fail
Run Code Online (Sandbox Code Playgroud)
应该改为
strcpy_s(mem, 100, "hello");
strcpy_s() 中的参数 2 是目标缓冲区的大小,而不是源缓冲区的大小。