我正在编译时查找C字符串文字的长度。 给出的定义:在字符串文字数组中编译字符串常量的时间大小
static const char * const header_left[] =
{
" | | Raw | Raw |",
" | | Start | End |",
"Interval#| Duration | Point | Point |",
"---------+----------+-------+-------+",
};
const unsigned int rows_in_header = sizeof(header_left)/sizeof(header_left[0]);
如何找到字符串字面header_left[2]
而不使用strlen
长度是多少?
在这个问题中,Determining the Length of a String Literal,有一个注释声明数组为header_left[][4]
。我不喜欢使用这种声明,因为在不改变数量常数的情况下,弦的数量有变化的趋势。我喜欢让编译器计算字符串的数量(请参阅rows_in_header
定义)以及每个字符串的长度。
这是一个嵌入式系统和字符串是块写成到串口。串口函数将一个指向数据的指针和数据的长度作为参数。串行端口代码已针对块写入进行了优化。首选是不使用strlen
,因为这会浪费性能时间。
我在ARM7TDMI平台上使用C99和IAR Embedded Workshop。
我已经包含c++
标签,因为这也涉及C++,我们将在首次产品发布后将代码迁移到C++。
所以你不能改变的定义呢?例如。宏魔法或C++魔术.. – dyp 2013-05-01 18:06:29
对于'static const char * const header_left []'而言,长度无关紧要,因为这是一个指针数组。你是否想要'static const char header_left [] [sizeof“Interval#| Duration | Point | Point |”] = {...};'? – 2013-05-01 18:06:34
@DanielFischer:我需要复制你的案例中的文本,一次是'sizeof',另一次是'{'和'}'之间的时间吗? – 2013-05-01 18:13:06