2015-01-11 6 views
0
_10_11.ino: In function 'void loop()': 
_10_11:73: error: initializer fails to determine size of 'results' 
_10_11.ino: In function 'char getData()': 
_10_11:160: error: invalid operands of types 'const char*' and 'const char [5]' to binary 'operator+' 


Arduino, функция возвращать массив символов

Короче говоря, у меня есть функция, которая возвращает char getData()char output[50] = "1: " + cmOne + " 2: " + cmTwo + " 3: " + cmThree + " 4: " + cmFour; где int cmOne, cmTwo, cmThree, cmFour.

В цикле, я называю:

char results[] = getData(); 

    client.println("1: %i", results[0]); 
    client.println("2: %i", results[1]); 
    client.println("3: %i", results[2]); 
    client.println("4: %i", results[3]); 

Я знаю, что я не так с моими типами данных, назначая т.д., но я Abit прочь, как сделать это лучше всего, какие-либо предложения ??

+0

Пожалуйста, решите. Это вопрос о C или о C++? – fuz

ответ

4

Это не возможно, создать массив фиксированного размера, и передать его функции в качестве указателя, и инициализировать его в функции

char results[4]; 

getData(results); /* the getData function should take a 'char *' paramenter */ 

client.println("1: %i", results[0]); 
client.println("2: %i", results[1]); 
client.println("3: %i", results[2]); 
client.println("4: %i", results[3]); 

и, конечно, если массив больше всего char results[A_BIGGER_SIZE];

Предположим, что получить данные только помещает строку "ABC" в result массиве это будет выглядеть

void getData(char *dest) 
{ 
    dest[0] = 'A'; 
    dest[1] = 'B'; 
    dest[2] = 'C'; 
    dest[3] = '\0'; 
} 
+0

Я правильно предполагаю, что я сделаю char results [4] глобальным, чтобы его можно было получить/назначить вне цикла? –

+0

@Simon Нет, вы должны просто объявить его в той же области цикла. И если вы хотите его в какой-то другой функции, просто передайте его как указатель на символ char *, и его нельзя назначить нигде, вы можете назначить его элементам. –

Смежные вопросы