Разделение строки по разделителям

Nubas_
Offline
Зарегистрирован: 19.07.2021

Есть строка на подобии этого: 20|15|20@10|20|30@10|10|10

Я хочу разделить сначала строки по разделителю @, а затем по |, но по @ у меня получается, а по | нет

 

Ругается на строку (error: initializer fails to determine size of 'sz2' и error: array must be initialized with a brace-enclosed initializer). Перепробовал по разному исправить проблему

char sz2[] = str;

 

  char *str;
  char sz[] = "10|20|30@13|25|25@17|19|19";
  char *p = sz;
  while ((str = strtok_r(p, "@", &p)) != NULL) 
  {
     Serial.println(str);
     char *str2;
     char sz2[] = str;
     char *p2 = sz2;
     while ((str2 = strtok_r(p2, "|", &p2)) != NULL) 
     {
       Serial.println(str2);
     }
     Serial.println("====");
  }

 

Nubas_
Offline
Зарегистрирован: 19.07.2021

Попробовал так:

char *str;
  char sz[] = "10|20|30@13|25|25@17|19|19";
  char *p = sz;
  while ((str = strtok_r(p, "@", &p)) != NULL) 
  {
     Serial.println(str);
     char *str2;
     char sz2[] = {};     
     for(int i = 0; i < 8; i++) sz2[i] = *(str+i);
     char *p2 = sz2;
    
     while ((str2 = strtok_r(p2, "|", &p2)) != NULL) 
     {
       Serial.println(str2);
     }
     Serial.println("====");
  }

Но выводит так: 

10|20|30
ù
20
30
ÿ10|20|30
ù
20
30
ÿ10|20|30
ù
20
30
ÿ10|20|30
ù
20
30
ÿ10|20|30
ù
20
30
ÿ10|20|30
ù
20
30
ÿ

 

Nubas_
Offline
Зарегистрирован: 19.07.2021

Всё, получилось решить

Может кому-то пригодится:

char *str;
  char sz[] = "10|20|30@13|25|25@17|19|19";
  char *p = sz;
  while ((str = strtok_r(p, "@", &p)) != NULL) 
  {
     Serial.println(str);
     char *str2;
     char *p2 = str;
    
     while ((str2 = strtok_r(p2, "|", &p2)) != NULL) 
     {
       Serial.println(str2);
     }
     Serial.println("====");
  }

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Надеюсь, Вы знаете, что strtok гадит в строку?

Nubas_
Offline
Зарегистрирован: 19.07.2021

заметил что когда строку из массива прогоняю с strtok второй раз, то в массиве из "10|20|30" остается только "10". Вы про это?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да

Nubas_
Offline
Зарегистрирован: 19.07.2021

Понял, спасибо