gpt4 book ai didi

c - strcpy_s 是如何工作的?

转载 作者:太空狗 更新时间:2023-10-29 16:44:27 28 4
gpt4 key购买 nike

众所周知,strcpy_s是strcpy的安全版本。

但我想知道它是如何工作的......

让我们看一些例子。

strpy_s的声明:
errno_t strcpy_s(_CHAR *_DEST, size_t _SIZE, const _CHAR *_SRC)

例1

char dest[5];
char* src = "abcdefg";
strcpy_s(dest,5,src);

它将返回一个断言。
我想我可以理解这一点,使用 _SIZE 来确保我们不能复制超过 _SIZE

的字符

但是..我不明白这个:

char dest[5];
char* src = "abcdefg";
strcpy_s(dest,10,src);

我们仍然可以得到一个断言,那是怎么发生的?

ps,错误是:

Debug Assertion Failed
expression : (L"Buffer is too small "&&0)


在 VS2013 中

strcpy_s 会检查其体内 dest 的大小吗??如果是真的,怎么样?如何检查像 _DEST 这样的指针?

最佳答案

这实际上是如何在运行时获取堆栈数组的大小而不将其衰减为指针:

template<typename T, size_t N> 
size_t arrSize(T (&array)[N])
{
return N;
}

您将其作为模板引用发送,模板机制会推导出大小。所以,你可以做类似的事情

int myArray[10];
cout << arrSize(myArray); // will display 10

所以我猜这就是“安全”MS strcpy_s 检查大小的方式。否则,如果您只传递一个指针,则没有符合标准的方法来获取大小。

关于c - strcpy_s 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23307268/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com