1

私のコードのこの部分の何が問題なのか誰か教えてもらえますか? 実行中にクラッシュします。

void MainWindow::on_pushButton_clicked()
{
char * cstr = new char [ui->lineEdit->text().length()];
       string costam;
       costam=ui->lineEdit->text().toStdString();
       strcpy(cstr, costam.c_str()); <<<----TROUBLE LINE
       int z;
       z=costam.length();
       for(int n=0;n<z;n++){
            string wynik;
            wynik=konwersja(cstr[n]);
            mors(wynik);
            Sleep(300);
           }
   delete[] cstr;
   }

Qt 5.0.1 で MinGW を使用してコンパイルしようとすると、すべて問題ありませんが、Qt 4.8.1 の MSVC2010 では警告が表示されます。

警告 C4996: 'strcpy': この関数または変数は安全でない可能性があります。代わりに strcpy_s の使用を検討してください。非推奨を無効にするには、_CRT_SECURE_NO_WARNINGS を使用します。詳細については、オンライン ヘルプを参照してください。

4

4 に答える 4

1

人々は C++ をプログラミングするときのセキュリティをあまり意識しておらず、そのために Windows が非難されているため、Visual Studio はバッファ オーバーフローの一般的な原因であるいくつかの関数を「非推奨」にしました。この場合は問題なく、おそらく _CRT_SECURE_NO_WARNINGS を定義することで警告を無効にすることができます。posix 関数でもこの問題が発生する場合があります。その場合、別の #define でこれらの警告を無効にすることができます。

于 2013-04-29T18:00:21.070 に答える
1

もう一度コンパイルして、この行strcpy(cstr, costam.c_str());を変更できますか?strcpy_s(cstr, costam.c_str());

また、コンパイルを妨げるべきではありません.MSVC2010は、安全でない使用法について警告しているだけです. MSVC2010の警告レベルを下げることもできます。

于 2013-04-29T17:58:38.573 に答える