C ++プログラムで単純なコマンドライン引数を取り込んで、さまざまなプログラムの動作をトリガーしようとしています-「y」(またはyで始まる任意の文字列-私はあまり気にしません)を含めると、プログラムはいくつかの中間結果を表示します.
一緒に走るとき
ccal pix.txt
すべて正常に動作します。
私が使うとき
ccal pix.txt はい
それは問題なく実行され、私の写真が表示され、最後にクラッシュします。
また、
ccal pix.txt いいえ
pixを表示せずにすべてを正常に実行し(本来あるべきように)、最後にクラッシュします。
関連するコードは次のとおりです-何が間違っていますか?
void dumpFloatMatrix(Mat m){
for(int i = 0; i < m.cols; i++){
for(int j = 0; j < m.rows; j++){
char *buff = new char[10];
sprintf(buff, "%5.1f ", m.at<float>(i,j));
cout << buff;
delete buff;
}
cout << endl;
}
}
int main(int argc, char *argv[]){
char* outFile;
bool showPix = false;
// Take in command line args
switch(argc){
case 3:
if(strncmp(argv[2], "y", 1) == 0)
showPix = true;
outFile = argv[1];
break;
case 2:
outFile = argv[1];
break;
default:
cout << "Usage: ccal INPUT_LIST_FILE" << endl;
return -1;
}
Mat cameraMatrix(3, 3, CV_32FC1);
dumpFloatMatrix(cameraMatrix);
return 0;
}
奇妙なことに、ケース 3 のテストを次のように切り替えても、次のようになります。
if(argv[2][0] == 'y')
私はまだ同じ動作を取得します。私は一生、理由を理解することはできません。