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

时间:2015-02-15 11:33:59

标签: c

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

2 个答案:

答案 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");

strcpy_s()中的

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