Насколько я понимаю, 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
)