C++プログラミングの学習
序文
C++ プログラミング (第 4 版) 第 5 章 配列を使用したバッチ データの処理
5.5.6 文字配列の応用例
例: 3 つの国名があり、アルファベット順で最初の国を見つける必要があります。関数呼び出しが必要です。
#include <iostream>
#include <string>
using namespace std;
int main() {
void smallest_string(char str[][30], int i);
int i;
char country_name[3][30];
for (i = 0; i < 3; i++)
cin >> country_name[i];
smallest_string(country_name, 3);
return 3;
}
void smallest_string(char str[][30], int n) {
int i;
char string[30];
strcpy_s(string, str[0]);
for (i = 0; i < n; i++)
if (strcmp(str[i], string) < 0)
strcpy_s(string, str[i]);
cout << endl << "The smallest string is:" << string << endl;
}
演算結果
考えられる問題
元のコードは strcpy_s の代わりに strcpy を使用しており、「strcpy」のような警告が表示されます
: この関数または変数は安全でない可能性があります。代わりに strcpy_s の使用を検討してください。非推奨を無効にするには、_CRT_SECURE_NO_WARNINGS を使用してください。詳細については、オンライン ヘルプを参照してください
。
Visual Studio バージョン 2022 を使用しています。
解決
- [プロジェクト プロパティ] を見つけ、[C++] の [プリプロセッサ] をクリックし、[プリプロセッサ] を編集して、コード _CRT_SECURE_NO_WARNINGS を追加します。
- strcpyをstrcpy_sに書き換えます。
Microsoft からのこの種の警告は、主に C ライブラリの関数が原因です。多くの関数はパラメータ検出を実行しません (範囲外のクラスを含む)。Microsoft は、これらの関数を使用するとメモリ例外が発生することを懸念し、パラメータ検出機能と同様の機能を追加しましたので、これらの新機能を利用することで、より安全で便利になります。