Преобразование char* в double

Lictor
Offline
Зарегистрирован: 01.10.2015

Доброго времени суток.

написал такой код

char* pznachX1[] = {"1", "2", "3", ".", "4", "5", "6", "9"};
char pzX1[8] = {};
byte m = 0;
double X1;
void setup() {
  Serial.begin(115200);
  while (m < 8) {
   //  strncpy(pzX1, pznachX1[m++], 8); 
    strncpy(pzX1, pznachX1[m], 8); // http://www.cyberforum.ru/cpp-beginners/thread158393.html
    m++;
  }
  X1 = atof(pzX1);
  Serial.print(X1);
}

void loop() {
}

Все бы ничего, но не работает. Серийный порт выдает значение 9.00 Т.е. последнее число в pznachX1.

Где я ошибся?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015
char* pznachX1 = "123.4569";
byte m = 0;
double X1;
void setup() {
  Serial.begin(115200);
  X1 = atof(pznachX1);
  Serial.print(X1);
}

void loop() {
}

 

Lictor
Offline
Зарегистрирован: 01.10.2015

DIYMan пишет:

char* pznachX1 = "123.4569";
byte m = 0;
double X1;
void setup() {
  Serial.begin(115200);
  X1 = atof(pznachX1);
  Serial.print(X1);
}

void loop() {
}

 

Благодарю, но мне нужно преобразовать именно char* pznachX1[] = {"1""2""3"".""4""5""6""9"}; в double.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Смысл так извращаться - хранить массив указателей на строки, каждая строка при этом в один символ длиной (не считая нуль-терминатора)? Не вижу смысла в этом сексе - сами себя запутываете. указатель на строку 

char* pznachX1 = "123.4569";

сам по себе уже является массивом символов, и к каждому символу можно обращаться по индексу: pznachX1[0] и т.д. А то, чем занимаетесь вы - это, как бы помягче, ненужные пляски. 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Если вы настаиваете, чтобы именно ваш вариант был, то, конечно, хозяин барин. Жаль только, что не вникнете всё равно, т.к. вижу, что не читали, чего делает strncpy и чем оно отличается от strcat, например. Впрочем, не моё свинское это дело - учить людей жить:

char* pznachX1[] = {"1", "2", "3", ".", "4", "5", "6", "9"};
char pzX1[9] = {};
byte m = 0;
double X1;
void setup() {
  Serial.begin(115200);
  while (m < 8) {
    strcat(pzX1, pznachX1[m]); 
    m++;
  }
  X1 = atof(pzX1);
  Serial.print(X1);
}

void loop() {
}

 

Lictor
Offline
Зарегистрирован: 01.10.2015

DIYMan пишет:

Смысл так извращаться - хранить массив указателей на строки, каждая строка при этом в один символ длиной (не считая нуль-терминатора)? Не вижу смысла в этом сексе - сами себя запутываете. указатель на строку 

char* pznachX1 = "123.4569";

сам по себе уже является массивом символов, и к каждому символу можно обращаться по индексу: pznachX1[0] и т.д. А то, чем занимаетесь вы - это, как бы помягче, ненужные пляски. 

 

Только стоя и в гамаке! Щас попробую.

Lictor
Offline
Зарегистрирован: 01.10.2015

Пардон, когда писал ответ, 4 поста не видел, сейчас буду изучать. Спасибо.