Sscanf расщепление строк не работает - PullRequest
2 голосов
/ 27 декабря 2011

Может кто-нибудь объяснить, почему строка не разбита в следующем коде

#include <stdio.h>

int main(void)
{
    char name[] = "first:last";
    char first[20], last[20];

    sscanf(name, "%s:%s", first, last);

    printf("first: %s, last: %s", first, last);

    return 0;
}

Вывод

first: first: last, last:

но это должно быть

первый: первый, последний: последний

Пожалуйста, проверьте код здесь http://ideone.com/JDSTt

Ответы [ 2 ]

9 голосов
/ 27 декабря 2011

Вы можете использовать что-то вроде этого:

sscanf(name, "%[^:]:%s", first, last);

: не является пробелом, поэтому обычный %s не будет рассматривать его как разделитель.Подробнее см. scanf.

(Отредактированная демоверсия: http://ideone.com/m4LVP)

2 голосов
/ 27 декабря 2011

См. Документацию scanf о %s спецификатор типа:

Строка символов. Это будет читать последующие символы до пробел найден (пробельные символы считаются пустыми, перевод строки и табуляция).

...