Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: scanf и разделитель "точка с запятой"
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
megajohn
есть строка "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 );
}
Genadi Zawidowski
не все компиляторы одинаково полезны (ИМХО).
Приведите выдачу Вашего варианта. И что за среда исполнения. Для тестового примера место под строку dest_str отведено без запаса (в данном случае я бы сделал не меньше чем оигинальная строка) - соответственно результат может быть вообще любым.
Интересно использовать форматный спецификатор %n, видно где остановился парсер в тот или иной момент.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.