sprintf — 4 бесполезных символа ascii перед строкой

Я работаю с Visual Studio 10, QT Addin и библиотеки Opecv.

Я хочу загрузить несколько файлов с помощью цикла for:

(У меня есть ui.image_templates_comboBox-> currentText () = «cat»)

for (int i = 1; i <= 15; i++){
string currentText = ui.image_templates_comboBox->currentText().toStdString();
char name[40];
sprintf(name, "Logos/cat/%s_%d.tif", &currentText, i);
templ_img [i] = cv::imread( name );

Итак, я подумал, что это должно работать нормально, но когда я отлаживаю его, я наводю указатель мыши над «name» и замечаю, что перед значением currentText стоят 4 неанглийских символа.

Я задаю 2 вопроса:

а) Как можно пропустить эти 4 бесполезных символа? (Я набрал их как «1234», так как этот сайт не может их отображать)

  • имя 0x003a7b04 «Logos / cat / 1234cat_1.tif» char [40]

б) Можно свернуть эти 4 строки в 1, используя выражение внутри imread ()?

0

Решение

Вы много смешиваете фреймворки и не понимаете как sprintf работает. Исправить это так:

for (int i = 1; i <= 15; i++){
QString fileName = QString("Logos/cat/%1_%2.tif")
.arg(ui.image_templates_comboBox->currentText())
.arg(i);
templ_img [i] = cv::imread(fileName.toAscii().data()); // or: toLocal8Bit, toLatin1(), toUtf8()
2

Другие решения

Вы не можете использовать адрес std::string где const char* ожидается. Они не то же самое.

sprintf(name, "Logos/cat/%s_%d.tif", currentText.c_str(), i);
5

По вопросам рекламы [email protected]