Можно ли использовать sscanf () для анализа строки с использованием разделителей «не пробел»? - PullRequest
0 голосов
/ 09 апреля 2020

Насколько я понимаю, sscanf() пытается отформатировать данную строку в соответствии с заданным форматом.

Пока я использую пробелы между спецификаторами формата, например "%d %s %s", он работает нормально.

Однако, если я изменяю его как "%d,%s,%s", он также читает какой-то мусор.

Код:

int main ( void )
{
    char string[100] = { 0 };

    int number;
    char name[100];
    char surname[100];

    strcpy( string, "12345,name,surname" );

    sscanf( string, "%d,%s,%s", &number, name, surname );

    printf("%d %s %s", number, name, surname );

    return 0;
}

Вывод с пробелами (строка: "12345 name surname" и в sscanf: "%d %s %s":

12345 name surname

Вывод с запятыми:

12345 name,surname ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠name,surname

Я что-то упустил здесь тривиально или не так работает sscanf?

РЕДАКТИРОВАТЬ ПЕРЕД ПОСТАВКОЙ Я думаю, это потому, что sscanf не знает, где заканчивается первая строка и начинается вторая. Это правильно, и если да, есть ли способ обойти это?

(Использование strtok() для разбора строк в прошлом вызывало у меня много головной боли, а sscanf проще в использовании и легче для чтения, поэтому я хочу использовать sscanf)

...