Как определить длину глобального массива в функции на Arduino? - PullRequest
4 голосов
/ 11 декабря 2011

Возможно ли что-то подобное в C ++ (на Arduino)?

#include "stdio.h"

String str = "foo";

int i[strLength()]; // <- define length of array in function

int strLength() {
  return str.length();
}

int main(void) {
   ...
}

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 11 декабря 2011

Если вы используете c ++, правильное решение - это std :: vector. Вам нужно будет просмотреть документы для std :: vector, но здесь приведено преобразование вашего кода в std :: vector.

Затем вы используете std :: vectors так же, как и обычные массивы, с оператором "[]".

#include <cstdio>
#include <vector>

String str = "foo";

int strLength() {  // Needs to come before the use of the function
  return str.length();
}

std::vector<int> i(strLength() ); //Start at strLength


int main(void) {
   ...
}
2 голосов
/ 11 декабря 2011

Нет.Вам потребуется i, чтобы быть указателем и выделить массив в вашем main:

int *i = NULL;

// etc.

int main(void) {

    i = (int*) malloc(sizeof(*i)*strLength());

    // etc.
}
1 голос
/ 11 декабря 2011

Я знаю, что это не то, на что вы надеялись, но я бы просто сделал что-то не элегантное, как это:

String str = "foo";
#define MAX_POSSIBLE_LENGTH_OF_STR 16

...

int i[MAX_POSSIBLE_LENGTH_OF_STR];

Идея состоит в том, что вы выделяете больше места для массива, чем вам действительно нужно, и простоизбегайте использования дополнительных частей массива.

В качестве альтернативы, если вы не собираетесь менять определение str в своем исходном коде очень часто, вы можете сэкономить некоторую память, выполнив это:

String str = "foo";
#define LENGTH_OF_STR 3

...

int i[LENGTH_OF_STR];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...