Перейти к содержанию
    

scanf и разделитель "точка с запятой"

есть строка "abc;123;"

не получается распарсить, пробовал и "%[^;]s%d;" и "%[^;]s;%d;"

 

как задать правильно строку форматирования ? ( менять ';' на ' ' ой как не хочется, хоть и работает )

 

void scanf_test( void )
{
    char src[] = "abc;123;";
    char dest_str[4];
    int dest_int;
    int sscanf_ret;
    sscanf_ret = sscanf( src, "%s;%d;", dest_str, &dest_int );
    printf( "sscanf_ret1=%d" "\n", sscanf_ret );
    sscanf_ret = sscanf( src, "%[^;]s%d;", dest_str, &dest_int );
    printf( "sscanf_ret2=%d" "\n", sscanf_ret );
    sscanf_ret = sscanf( src, "%[abc]s%d;", dest_str, &dest_int );
    printf( "sscanf_ret3=%d" "\n", sscanf_ret );
    sscanf_ret = sscanf( src, "%[^;]s;%d;", dest_str, &dest_int );
    printf( "sscanf_ret4=%d" "\n", sscanf_ret );
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не все компиляторы одинаково полезны (ИМХО).

Приведите выдачу Вашего варианта. И что за среда исполнения. Для тестового примера место под строку dest_str отведено без запаса (в данном случае я бы сделал не меньше чем оигинальная строка) - соответственно результат может быть вообще любым.

Интересно использовать форматный спецификатор %n, видно где остановился парсер в тот или иной момент.

Изменено пользователем Genadi Zawidowski

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...