我在" Arduino"中创建了一个字符串数组。像这样:
String commandList[] = {"dooropen", "doorlock"};
在我的代码中,我想知道这个数组的大小,我不想像底部代码一样定义这个数组的大小:
#define commandListArraySize 2
我试着像这样得到这个变量的大小:
int size = sizeof(commandList);
但是返回的size
= 12
。
答案 0 :(得分:1)
我喜欢模板数组大小变体,因为它不能与指针类型一起使用:
// 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
}
答案 1 :(得分:0)
只要你是创建数组的范围(你没有将数组传递给函数),就可以使用这个常见的宏:
#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]);
}
答案 2 :(得分:0)
当你要求字符串数组的长度时,sizeof方法返回数组中所有字符的长度。所以我们指望:
String commandList[] = {"dooropen", "doorlock"};
int a = 0;
int counter = 0;
while(counter < sizeof(commandList)){
counter += sizeof(commandList[a]);
a++;
}
int arrayLength = a;
答案 3 :(得分:0)
String commandList[] = {"dooropen", "doorlock"};
int size = commandList.length;