目前,我有以下代码块来进行安全字符串复制(它的工作原理):
#define STRCPY(dst, src) do { assert(((void*)(dst)) == ((void*) & (dst))); \
strlcpy(dst, src, sizeof(dst)); } while (0)
Run Code Online (Sandbox Code Playgroud)
所以它接受如下构造:
const char *src = "hello";
char dest[5];
STRCPY(dest, src); //hell
Run Code Online (Sandbox Code Playgroud)
并否认以下内容:
void (char *dst) {
STRCPY(dst, "heaven"); //unknown size of dst
}
Run Code Online (Sandbox Code Playgroud)
问题是代码块会产生一个断言.有没有办法在编译时执行此检查?
所以我想在编译时遇到错误(比如创建一个负大小的数组),而不是在可能的情况下崩溃代码.