验证传递给函数的字符串类型(例如,文字,数组,指针)

Hid*_*gel 8 c c++ string

我有一个函数,它接受一个字符数组及其大小:

void store_string (const char *p, size_t size); // 'p' & 'size' stored in map
Run Code Online (Sandbox Code Playgroud)

该函数由宏包装为:

#define STORE_STRING(X) store_string(X, sizeof(X))
Run Code Online (Sandbox Code Playgroud)

我的问题是,我想以某种方式禁止或通知用户只应将字符串文字传递给此函数.因为,如果任何指针或本地数组存储在地图内,那么它们可能会超出范围并造成严重破坏!

是否有任何编译时方式(首选)或至少是运行时方式吗?

iam*_*ind 26

只需将宏更改为:即可知道编译时间:

#define STORE_STRING(X) store_string("" X, sizeof(X))
Run Code Online (Sandbox Code Playgroud)

用法:

char a[] = "abcd", *p;
STORE_STRING(a); // error
STORE_STRING(p); // error
STORE_STRING("abcd"); // ok
Run Code Online (Sandbox Code Playgroud)

  • 非常整洁 - 我没有想到这一点. (3认同)
  • @Saytonurn,`sizeof()`更高效,因为它在编译时已知.而且我们不必担心,因为参数肯定是字符串文字. (2认同)
  • 很好的解决方案.但是,任何处理数组的解决方案呢? (2认同)