Как получить размер массива 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;