Sscanf в C++: как я могу воспроизвести его поведение в библиотеках C++?C++

Программы на C++. Форум разработчиков
Ответить
Гость
 Sscanf в C++: как я могу воспроизвести его поведение в библиотеках C++?

Сообщение Гость »

Код: Выделить всё

int getCursorPosition(int *rows, int *cols) {
char buf[32];
u_int i = 0;
if (write(STDOUT_FILENO, "\x1b[6n", 4) != 4) return -1;
while (i < sizeof(buf) - 1) {
if (read(STDIN_FILENO, &buf[i], 1) != 1) break;
if (buf[i] == 'R') break;
i++;
}

buf[i] = '\0';
if (buf[0] != '\x1b' || buf[1] != '[') return -1;
if (sscanf(&buf[2], "%d;%d", rows, cols) != 2) return -1;

return 0;
}
Я работаю над хобби-проектом, в котором пытаюсь воспроизвести текстовый редактор kilo, отдавая приоритет использованию стандартной библиотеки C++, а не C. Мне трудно найти решение в C++. библиотеки, которые могут копировать поведение sscanf в этой функции.
По сути, это запасная функция на случай, если система, на которой работает редактор, не может получить доступ к termios.h для измерения размера терминала, на котором работает редактор. приложение. Функция использует escape-код VT100 ^[6n, чтобы получить текущую позицию курсора из терминала, который возвращает ^[;R.
Что я не могу понять, так это то, что sscanf, похоже, имеет доступ к ответу терминала и присваивает эти значения. Я пробовал работать с sstream, но, похоже, не могу воспроизвести такое поведение. Неужели в C++ нет ничего, что могло бы это сделать?

Подробнее здесь: https://stackoverflow.com/questions/781 ... -libraries
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»