-1

我有一个使用的程序,我使用 getOpenFileName 如下:

QString fileName = QFileDialog::getOpenFileName(this,
                    tr("Select video"), "d:\\", tr("Video files (*.avi)"));
strcpy(thePath, fileName.toStdString().c_str()); // static char thePath[66];
scilab.setPathloc(thePath);

scilab是一个将作业发送到程序 SCILAB 的类的对象。它的工作方式如下:

char std_dev[99];
char direc[60];
sprintf(direc,"direc=\'d:/BMDvideos/%s/%s/\'",getSessionName(),getVideoname());
sprintf(std_dev,"fn=\'d:/BMDvideos/%s/%s/%s.avi\'",
        getSessionName(),getVideoname(),getVideoname());
SendScilabJob(direc);
SendScilabJob(std_dev);
//SendScilabJob("fn=\'d:/BMDvideos/Aufnahme0.avi\'");
SendScilabJob("exec('U:/scilab/done/std_dev.sce');");

好吧,这很好用,但是当我使用QString类似的东西时:

 char text1 [70]    ;
 sprintf(text1,"disp(fn=\'%s\');",getPathloc());
 SendScilabJob("exec('U:/scilab/done/std_dev.sce');");

没有任何效果,我认为这是因为//我必须在sprintf. 知道如何解决这个问题吗?

4

1 回答 1

1

@borisbn 几乎肯定发现了问题。sprintf是一个 C 函数,而不是 C++,而且它根本不是类型安全的。它假定您知道要传递哪些类型。而对于%s,那就是const char*

简单的解决方案:不要使用sprintf. 你有一个合适的 C++ 类,QString. 例如 QString text = QString("disp(fn=\'%1\');").arg(getPathloc())。请注意,您不要使用%s. 因为它是 C++,所以它是类型安全的,编译器会判断你传递的是整数还是字符串。

于 2013-03-01T14:08:57.380 回答