C ++ Sscanf показывает неожиданное поведение - PullRequest
1 голос
/ 11 декабря 2011

У меня есть строка, похожая на L"\"4\"", и я хочу преобразовать ее в целочисленное значение.

std::wstring wsFoo(L"\"4\"");
int iSize = 1; // Number of characters the number will have
int iResult = -1;
swscanf_s(wsFoo.c_str(), L"\"%*d\"", iSize, &iResult);
wprintf_s(L"%d", iResult);

Согласно http://www.cplusplus.com/reference/clibrary/cstdio/printf/ звездочка в %*d должна означать: Ширина не указана в строке формата, но является дополнительным целочисленным аргументом значения, предшествующим аргументу, который должен быть отформатирован.

И все же значение iResult будет отображаться как -1после этого фрагмента кода.Почему?

Не знаю, помогает ли это, но я использую MSVC ++ 2010.

Ответы [ 2 ]

3 голосов
/ 11 декабря 2011

Эта страница MSDN объясняет использование * like:

Звездочка (*) после знака процента подавляет присвоение следующее поле ввода, которое интерпретируется как поле указанного тип. Поле сканируется, но не сохраняется.

Обратите внимание, что поля формата для printf и scanf близки, но не идентичны.

1 голос
/ 11 декабря 2011

Вы смотрите значение звездочки для printf, а не scanf.

Если между процентами и оператором стоит звездочка (*), e. г. % * d, оператор будет соответствовать только своему аргументу и не назначать никаких переменных.

http://docs.roxen.com/pike/7.0/tutorial/strings/sscanf.xml

...