У меня есть функция для записи файлов ppm (формат изображения) на диск.Он принимает имя файла как массив char *.В моей основной функции я собрал имя файла, используя поток строк и оператор <<.Затем я хочу передать результаты этого в мою функцию ppm.Я видел это обсуждаемое в другом месте, часто с очень запутанными методами (многие промежуточные шаги преобразования).</p>
То, что я сделал, показано в приведенном ниже коде, и хитрая часть, которую другие обычно делают во многих шагах с временными переменными, - (char*) (PPM_file_name.str().data())
.Для этого нужно извлечь строку из строкового потока PPM_file_name с помощью .str (), затем получить указатель на ее фактическое содержимое с помощью .data () (это const char *), а затем привести его к обычному (char *).Ниже приведен более полный пример.
До сих пор мне показалось, что следующее работает нормально, но меня это беспокоит, потому что обычно, когда другие люди делают что-то более запутанным, это потому, что это более безопасный способсделай это.Итак, кто-нибудь может сказать мне, если то, что я делаю здесь, безопасно, а также насколько оно портативно?
Спасибо.
#include <iostream>
#include <sstream>
#include <stdio.h>
#include <string>
using namespace std;
int main(int argc, char *argv[]){
// String stream to hold the file name so I can create it from a series of other variable
stringstream PPM_file_name;
// ... a bunch of other code where int ccd_num and string cur_id_str are created and initialized
// Assemble the file name
PPM_file_name << "ccd" << ccd_num << "_" << cur_id_str << ".ppm";
// From PPM_file_name, extract its string, then the const char* pointer to that string's data, then cast that to char*
write_ppm((char*)(PPM_file_name.str().data()),"ladybug_vidcapture.cpp",rgb_images[ccd_num],width,height);
return 0;
}