Как мне получить преобразовать эту std :: string в std :: basic string? - PullRequest
0 голосов
/ 27 октября 2018

В настоящее время у меня есть std:::string с именем cipher_line, который я получаю в процессе:

string str_cipher_line;
// Get the Offline Mount Point
ifstream ifs1;
ifs1.open(offlineMountPoint.c_str());

if (ifs1.is_open()) {
    getline(ifs1, str_cipher_line);
} else {
    cout << "unable to open file" << endl;
    return 1;
}

ifs1.close();  

Теперь я хочу получить secure_string от cipher_line.secure_string определяется ниже:

typedef std::basic_string<char, std::char_traits<char>, zallocator<char> > secure_string;

Я не понимаю, как это сделать.Должен ли я использовать memcpy или strcpy?

1 Ответ

0 голосов
/ 27 октября 2018

Используйте std::basic_string конструктор итератора (6 на cppreference) для построения из secure_string или std::copy. То же самое относится и наоборот.

#include <iostream>

template <typename T>
struct some_other_allocator : std::allocator<T>{};

using other_string = std::basic_string<char, std::char_traits<char>, some_other_allocator<char>>;

int main() {
    other_string string1("hello");

    //using std::string constructor
    std::string string2(string1.begin(),string1.end());

    std::string string2_copy;
    //using std::copy
    std::copy(string1.begin(),string1.end(),std::back_inserter(string2_copy));

    std::cout << string1 << std::endl;
    std::cout << string2 << std::endl;
    std::cout << string2_copy << std::endl;
    return 0;
}

Демо

...