0
Мне интересно, почему sscanf работает неправильно. Вот случайизвлечение данных из sscanf
У меня есть строка «1,2,3, #», и я хочу, чтобы извлечь данные без запятой, код
int a1,a2,a3;
char s;
string teststr = "1,2,3,#";
sscanf(teststr.c_str(), "%d,%d,%d,%s",&a1,&a2,&a3,&s);
cout << teststr << endl;
cout << a1 << a2 << a3 << s << endl;
ожидаемый результат должен быть 123#
, но реальный результат я получил, что 120#
a3
всегда 0.
Если я расширяю до 4 номеров,
int a1,a2,a3,a4;
char s;
string teststr = "1,2,3,4,#";
sscanf(teststr.c_str(), "%d,%d,%d,%d,%s",&a1,&a2,&a3,&a4,&s);
cout << teststr << endl;
cout << a1 << a2 << a3 << a4 << s << endl;
Тогда результат становится 1230#
. Кажется, что последний int всегда 0. Почему это произойдет? Как это исправить?
' "% d,% d,% d,% s" '->' "% d,% d,% d,% C"' – BLUEPIXY
Спасибо! Это работает! Но почему? – hhh
Если фактический тип аргумента с параметром формата не соответствует UB. '% s' добавить NUL (' '\ 0''), чтобы он уничтожил (перекрутил) память. или должен быть 'char s [2];' ... '% 1s'. – BLUEPIXY