Ilfar_sif
@Ilfar_sif
эникейщик

Почему не работает sscanf?

запускаю вот этот код, функция sscanf выводить только переменную 'о', а 's' пустая:
на выходе это:
544*,8
o=544
s=

String _data="544*,8";
     char o[10];
     char s[10];
      const char *mycharp = _data.c_str();    
sscanf(mycharp, "%[^'*'],%[','^]", o, s);
Serial.print("o=");
Serial.println(o);
Serial.print("s=");
Serial.println(s);


Вот это:
sscanf(mycharp, "%[^'*'],%[','^]", o, s);

Меняю на:
sscanf(mycharp, "%[^'*'],%[','^]", s, o);

тогда все работает правильно. на выходе получаю:
544*,8
o=544
s=8
Почему так?
  • Вопрос задан
  • 450 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Чтобы работало с приведённой строкой, формат должен быть таким:
sscanf(mycharp, "%[^'*']*,%[','^]", o, s);
Исходный формат не работает, потому что обработка %[^'*'] остановится на входном символе *, и так там и останется, потому что последующая часть форматной строки не поглощает этот символ.
Кроме того, вы, мне кажется, понаставили лишних апострофов внутри квадратных скобок. В форматной строке они интерпретируются буквально, т.е. формат "%[^'*']" означает "символы, кроме апострофа, звёздочки или апострофа". Вот так тоже должно работать:
sscanf(mycharp, "%[^*]*,%[,^]", o, s);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы