如何使用QString和'\'

时间:2013-03-01 12:52:30

标签: c++ qt

我有一个在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。知道怎么解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

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