Преобразование типов в const char*

300
06 июля 2017, 02:51

Нужна помощь в приведении к правильному типу данных. При помощи строкового типа я получаю список файлов в папке. Далее я хочу передавать имя файла в FILE*чтобы в дальнейшем с ним работать. И вот уже битый час бьюсь в попытке преобразовать тип. Например на вот такую конструкцию он у меня ругается на то что не может считать символы строки std::string files; const char * conv_files = files.c_str();

    // Директория для отображения
string dir = string(".");
// Вектор в который помещаются имена файлов
vector<string> files = vector<string>();
getdir(dir, files);
for (unsigned int i = 0; i < files.size(); i++)
{
    cout << files[i] << endl;
    FILE *file;
    errno_t err;
    err = fopen_s(&file, "3285.wav", "rb");
    if (err)
    {
        printf_s("Failed open file, error %d", err);
        return 0;
    }
}
Answer 1

я посмотрел на сорцы. В них чудо код, который заставляет усомниться в компиляторе. Посмотрим на кусок

vector<string> files = vector<string>();
    getdir(dir, files);
    for (unsigned int i = 0; i < files.size(); i++)
    {
        cout << files[i] << endl;
        std::string files;
        const char * conv_files = files.c_str();

        FILE *file;
        errno_t err;
        err = fopen_s(&file, "3285.wav", "rb"); // сюда вместо 3285.wav я хочу передать files[i]

Я никак не мог понять, почему когда я пишу вот так

err = fopen_s(&file, files[i].c_str(), "rb");

оно ругается. А ларчик открывается просто - в данном месте files уже не вектор строк, а просто строка. И достаточно удалить две ненужные строки

std::string files;
const char * conv_files = files.c_str();

как все начинает компилироваться.

P.S. Правда по коду используются "секюрные функции" с префиксом _s, которые нормальными компиляторами абсолютно не поддерживаются с такими сигнатурами. Поэтому, мне пришлось немного их поправить:)

Answer 2

Нет никакой проблемы в том, чтобы написать

err = fopen_s(&file, files[i].c_str(), "rb");

Поэтому не ясно, в чем заключается ваше затруднение.

READ ALSO
Не работает обработчик change с jQuery Selectmenu

Не работает обработчик change с jQuery Selectmenu

Почему не работают ниon('change',

228
Как добавить &lt;input&gt; в избранное?

Как добавить <input> в избранное?

Добрый деньПрошу помощи, так как сам не могу понять как можно реализовать одну фишку

295
Отмена функции при неактивном input поле

Отмена функции при неактивном input поле

Функция собирает из инпутов данные и выводит их в title и h1Нужно чтобы при неактивных чекбоксах значение title и h1 возвращались в первоначальный...

250
Как получить значение атрибута css?

Как получить значение атрибута css?

Нужно проверить скрытый он или нетИ потом записать туда другое значение

172