-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 に答える