【发布时间】:2019-05-18 18:43:22
【问题描述】:
目前,我有以下代码块来进行安全的字符串复制(它有效):
#define STRCPY(dst, src) do { assert(((void*)(dst)) == ((void*) & (dst))); \
strlcpy(dst, src, sizeof(dst)); } while (0)
所以它接受如下结构:
const char *src = "hello";
char dest[5];
STRCPY(dest, src); //hell
并否认以下内容:
void (char *dst) {
STRCPY(dst, "heaven"); //unknown size of dst
}
问题是代码块创建了一个断言。有没有办法对编译时间进行检查?
所以我希望在编译时出现错误(如creating an array with negative size),而不是在可能的情况下崩溃代码。
【问题讨论】:
-
sizeof *dst在您的情况下是未知的,那么您期望什么?并且检查 is 在编译时完成。您的意思是:有没有办法在运行时间执行此检查? -
如果指针通过(不是数组)则编译错误
-
请edit你的问题,并把所有的澄清那里。
-
这不是重复的。 OP想知道宏的参数是指针还是不是编译时间