使用strcpy_s时"缓冲区太小"错误

Cha*_*Sun 2 c

当运行下面的代码时,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)

nvo*_*igt 9

但是你从未将其传递100strcpy_s方法.你通过了5(你好的长度).事实上,由于复制"hello"需要6个字节(5加nul字节),因此假定缓冲区太小.

必须将缓冲区的大小作为参数传递.将字符串的大小传递给复制会使函数的整个使用无效.如果你传递字符串的大小来复制你也可以使用,strcpy因为它会做同样的事情.


Gin*_*ack 5

strcpy_s(mem, strlen("hello"), "hello"); // <----- Assertion Fail
Run Code Online (Sandbox Code Playgroud)

应该改为

strcpy_s(mem, 100, "hello");

strcpy_s() 中的参数 2 是目标缓冲区的大小,而不是源缓冲区的大小。