2015-09-16 2 views
0

У меня возникла проблема с передачей char* массиву char** на моем Teensy.C++ Arduino, передающий char * в массив char *

Ниже проблематичная часть:

for (j = 0; j < rulesamountsingle; j++) { 
    emptybuffer(buff); 
    char temp[10]; 
    while(!Serial.available()); 
    len = Serial.available(); 
    for (i = 0; i < len; i++) { 
    temp[i] = Serial.read(); 
    } 
    temp[len-1] = 0; 
    fuzzyRulesSingle[j] = temp; 
    Serial.print(fuzzyRulesSingle[j]); 
    Serial.print('\n'); 
} 

Как вы можете видеть, fuzzyRulesSingle[j] (где fuzzyRulesSingle является char**) будет заполнена переменной tempchar*). По мере того, как я увеличиваю j, следующий адрес в fuzzyRulesSingle будет заполнен новым temp.

Однако, когда я печатаю свой fuzzyRulesSingle ВНЕ ПЕРВОГО кода, все fuzzyRulesSingle будет заполнено последним значением темпа.

Где я пошла не так?

+1

Вы повторно 'temp' снова и так' fuzzyRulesSingle [J] 'всегда указывает на такое же место. Вам нужно скопировать символы в 'temp' в' fuzzyRulesSingle [j] '- сначала выделить пространство. –

+0

Можете ли вы показать нам определение объекта fuzzyRulesSingle. Является ли это массивом указателей или массивов? – rozina

ответ

1

Вы указываете fuzzyRulesSingle[j] временному массиву символов temp. Простым способом исправить это является изменение fuzzyRulesSingle[j] = temp; на strcpy(fuzzyRulesSingle[j], temp) и изменение объявления fuzzzyRulessSingle на нужный размер.

ИЛИ

вы можете объявить temp Негабаритные петлю и использовать malloc для выделения памяти необходимо, а затем присвоить его fuzzyRulesSingle[j]