Трябва да декодирам и изпратя GPS сигнал до отдалечен сървър с помощта на GSM модул. Генерирах стойности за географска ширина и дължина поотделно и ги свързах в масив char
. Така че мога лесно да предам char*
на серийния write()
метод на GSM модулите. Но тези свързани низове съдържат грешни стойности. Проверих за декодираните стойности и те имат реални числа, но това се случва само когато го свържа в моя масив char
. Изпълнявам този код на Arduino Uno:
void loop()
{
char data[128];
data[0]='\0';
initialize();
strncat(data,getLat(),10);
strncat(data," ",2);
strncat(data,getLon(),10);
Serial.write(data);
Serial.println();
}
char* getLat(){
char buffer[10];
dtostrf(flat, 3, 6, buffer);
Serial.write(buffer);
Serial.print(" ");
return buffer;
}
Изходът изглежда така: първите две колони съдържат току-що отпечатаните стойности при извикване на getLat()
метода (няма грешки в преобразуването), а последните две стойности са свързаната част.
6.929772 79.947296 Àb 79.947296
6.929772 79.947296 6.929772 79.947296
6.929772 79.947296 6.929772 79.947296
6.929772 79.947296 6.929772 79.947296
6.929772 79.947296 6.929772 79tdt
6.929772 79.947296 6.929772 79.947296
6.929772 79.947296 6.vtet bztbt
6.929772 79.947296 6.929772 79.947296
Може ли някой да ми каже какво не е наред тук? Благодаря ви предварително.
getLat()
връща адреса на автоматична променлива. Този адрес вече не е валиден, след като функцията се върне, и всяко дереференциране или дори оценка на този адрес предизвиква недефинирано поведение. - person WhozCraig   schedule 30.08.2014