Как получить размер массива String

Я создаю строковый массив в "Arduino" следующим образом:

String commandList[] = {"dooropen", "doorlock"}; 

И в моем коде я хочу знать размер этого массива, и я не хочу определять размер этого массива, как нижний код:

#define commandListArraySize 2

Я пытаюсь получить размер этой переменной следующим образом:

int size = sizeof(commandList);

Но тот вернулся size знак равно 12,

4 ответа

Мне нравится вариант Array Size шаблона, так как его нельзя использовать с указателем типа:

// Solution proposed by @TylerLewis:
#define ARRAY_SIZE(x) sizeof(x)/sizeof(x[0])

// Template based solution:
template<typename T, size_t N> size_t ArraySize(T(&)[N]){ return N; }

int test(String * ptr);

void setup() {
  String arr[] = {"A", "B", "C"};
  Serial.begin(115200);
  Serial.println(ArraySize(arr));  // prints 3
  Serial.println(ARRAY_SIZE(arr)); // prints 3

  test(arr);
}

void loop() {
}

int test(String * ptr) {
  // Serial.println(ArraySize(ptr));  // compile time error
  Serial.println(ARRAY_SIZE(ptr));    // prints 0 as sizeof pointer is 2 and sizeof String is 6
}

Когда вы запрашиваете длину строкового массива, метод sizeof возвращает длину всех символов в массиве. Итак, давайте рассчитывать на это:

String commandList[] = {"dooropen", "doorlock"}; 
int a = 0;
int counter = 0;
while(counter < sizeof(commandList)){
  counter += sizeof(commandList[a]);
  a++;
}
int arrayLength = a;

Пока вы находитесь в области действия, в которой был создан массив (вы не передаете массив функции), вы можете использовать этот общий макрос:

#define ARRAY_SIZE(x) sizeof(x)/sizeof(x[0])

и использовать это так:

String[] myStrings{"Hello", "World", "These", "Are", "Strings"};
for (size_t i = 0; i < ARRAY_SIZE(myStrings); i++) {
    Serial.println(myStrings[i]);
}
String commandList[] = {"dooropen", "doorlock"}; 

int size = commandList.length;
Другие вопросы по тегам