【发布时间】:2023-03-17 08:01:01
【问题描述】:
我想用string 初始化一个本地char array,它生成为一个静态常量指针。基本上是这样的:
static const char * const FOO = "foo"; /* generated */
char bar[12] = FOO; /* my code */
编译器不接受:
error: array must be initialized with a brace-enclosed initializer
我可以使用什么构造来初始化char array 栏,其中string 指向FOO?
上下文:在我的公司,我们使用 C++ 为 C 代码编写单元测试器 框架。因此 bar 参数必须是一个数组,不能是 C++ 字符串类型。 FOO 常数是从专有的 IDL。代码生成器为 C 代码生成一个#define,但是一个静态的 const char * const 用于 C++。
【问题讨论】:
-
char bar[12]; strcpy(bar, FOO);? -
你需要修改字符串吗?如果没有,为什么不直接留在指针上?
-
@Aconcagua: 是的,字符串必须稍后修改。
-
@mch 和 Thomas Sablik:您的解决方案可以,但如果可能的话,我想要一个单行解决方案。
-
我会将
Assert(sizeof bar > strlen(FOO));添加到测试代码中。之后strcpy(bar, FOO);。这使您的测试人员对生成的代码的更改更加健壮。