【发布时间】:2017-09-06 02:37:21
【问题描述】:
我有一个struct,其中成员是一个最大长度为N 的字符串。定义:
typedef struct
{
const char foo[N];
} bar_t;
我希望这个结构的用户初始化foo 成员,长度不超过N:
bar_t mybar = { .foo = "12345678" };
在哪里N=8。由于我无法控制bar_t 的所有初始化,因此如果bar_t.foo 的长度大于N,我想依靠编译器生成警告/错误。
问题在于,为了说明终止符(为了能够将bar_t.foo 用作普通字符串),我需要指定长度为N+1 的bar_t.foo
或者,我可以将bar_t.foo 的长度设置为N,并在使用长度为> N 的字符串初始化时收到编译器警告,但我现在需要明确预期的字符串长度(即@987654337 @ 系列函数,以 N 作为最大长度参数)在使用需要终止符的函数时。
有没有办法让编译器限制初始化器的长度,并且还能够在不明确最大字符串长度的情况下处理字段?
【问题讨论】:
-
相反的策略怎么样:总是将空字符附加到字符串文字:
.foo = "12345678\0"?
标签: c string initializer