我有一个在wichI中使用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.it工作如下:
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
。知道怎么解决这个问题?
答案 0 :(得分:1)
@borisbn几乎肯定发现了这个问题。 sprintf
是一个C函数,而不是C ++,它根本不是类型安全的。它假定您知道要传递的类型。对于%s
,那是const char*
。
简单的解决方案:不要使用sprintf
。你有一个合适的C ++类QString
。例如。 QString text = QString("disp(fn=\'%1\');").arg(getPathloc())
。请注意,您不使用%s
。因为它是C ++,所以它是类型安全的,编译器会判断你是传递整数还是字符串。