如何获取String数组的大小

时间:2017-04-01 17:10:48

标签: arrays string arduino

我在" Arduino"中创建了一个字符串数组。像这样:

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

在我的代码中,我想知道这个数组的大小,我不想像底部代码一样定义这个数组的大小:

#define commandListArraySize 2

我试着像这样得到这个变量的大小:

int size = sizeof(commandList);

但是返回的size = 12

4 个答案:

答案 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;