sprintf - 在字符串之前有4个无用的ascii字符

时间:2015-01-02 14:18:11

标签: c++ qt opencv printf imread

我正在使用visual studio 10,qt addin和opecv library。

我想要做的是使用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个非英文字符。

我问了两个问题:

a)如何省略这4个无用的字符? (我将它们键入为“1234”,因为此站点无法显示它们)

  • 名称0x003a7b04“Logos / cat / 1234cat_1.tif”char [40]

b)可以使用imread()?

中的表达式将这4行折叠为1

2 个答案:

答案 0 :(得分:5)

您无法使用std::string的地址const char*。它们不一样。

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

答案 1 :(得分:2)

您正在混合使用框架,并且您不了解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()