Можно ли использовать класс string вместе со scanf?

273
02 мая 2018, 05:15

Для вывода объекта класса string с помощью printf можно воспользоваться методом c_str()

std::string str = "ala";
printf("%s", str.c_str());

Но этот метод, конечно, нельзя использовать для записи строки с помощью scanf. Есть ли какие-то возможности для записи в string напрямую, без использования дополнительного массива char?

Answer 1

Хотя придумать всегда возможно:

string s;
s.reserve(100);
scanf("%99s",  const_cast<char*>(s.c_str()));
s = string(s.c_str());
cout << s;
Answer 2

Формально начиная с C++17, string::data() возвращает char*, т.е. вроде бы можно... Но только все равно потом надо напильником... - чтоб, например, правильно длина возвращалась.

#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int main() {
    string s(10,' ');
    strcpy((char*)s.data(),"Hello");
    s.resize(5);
    cout << s << endl;
    cout << s.length() << endl;
    return 0;
}

https://ideone.com/ioUGIa

READ ALSO
Непонятное поведение программы

Непонятное поведение программы

Нужно написать реализацию метода шаблонного класса List для простых типов данных и строк(сhar*), которая будет загружать список с csv файлаНаписал,...

248
Асинхронная запись в файл WinApi

Асинхронная запись в файл WinApi

Есть программа поиска всех файлов каталоге С

267
Реализация алгоритма CN2

Реализация алгоритма CN2

Есть ли у кого-нибудь реализация данного алгоритма на языках C/C++/Java? Ну, или хотя бы псевдокод с описанием? Буду рад любой помощи

246