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

Ach*_*kon 0 c++ printf qt opencv 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 );
Run Code Online (Sandbox Code Playgroud)

所以,我认为这应该工作正常,但是当我调试它时,我将鼠标悬停在"name"上方,我注意到currentText值之前有4个非英文字符.

我问了两个问题:

a)怎么可能省略那4个无用的字符?(我将它们键入为"1234",因为此站点无法显示它们)

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

b)可以使用imread()中的表达式将这4行折叠为1吗?

nvo*_*igt 5

您不能使用的地址std::string,其中一个const char*预期.他们不一样.

sprintf(name, "Logos/cat/%s_%d.tif", currentText.c_str(), i);
Run Code Online (Sandbox Code Playgroud)

  • 这是在C++中使用`printf`风格函数的危险 - 不可能进行类型检查. (2认同)