Я хочу найти длину литерала 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
?
В этом вопросе Определение длины строкового литерала есть комментарий для объявления массива как header_left[][4]
. Я предпочитаю не использовать такое объявление, так как существует тенденция к изменению количества строк без изменения константы количества. Мне нравится, когда компилятор вычисляет количество строк (см. определение rows_in_header
) и длину каждой строки.
Это для встроенной системы, и строки записываются блоками в последовательный порт. Функция последовательного порта принимает указатель на данные и длину данных в качестве параметров. Код последовательного порта оптимизирован для блочной записи. Предпочтительно не использовать strlen
, потому что это тратит впустую время производительности.
Я использую C99 с IAR Embedded Workshop на платформе ARM7TDMI.
Я включил тег c++
, потому что это также касается C++, и мы будем переносить код на C++ после первого запуска продукта.
static const char * const header_left[]
длина не имеет значения, так как это массив указателей. Возможно, вы хотелиstatic const char header_left[][sizeof "Interval#| Duration | Point | Point |"] = { ... };
? - person Daniel Fischer   schedule 01.05.2013sizeof
и другое время между{
и}
? - person Thomas Matthews   schedule 01.05.2013