2つのCスタイルの文字列で大文字と小文字を区別しないstrcmpを実行しようとしています。Cスタイルの文字列のtolower
私はCスタイルの文字列を小文字に変換する機能を持っています。
char* ToLowerCase(const char* str)
{
char buffer[strlen(str)];
for (int i=0; i<strlen(str); ++i)
buffer[i] = char(tolower(str[i]));
return buffer;
}
1つの文字列は、GetMyString(IをINT)*機能チャーから来て、そして第二には、Cスタイルの文字列のchar * myStringsの配列である[5]。だから、GetMyString(0)とのmyStringの両方が[0]の両方のリターン "TEXT"
strcmp(ToLowerCase(GetMyString(0)), ToLowerCase(myStrings[0]));
は "mytextxaogs5atx" "mytextxabs5atx"(いくつかのランダムなテキストが追加されます...)
のような文字列を比較することを想定し私はあなたのいくつかは、と思うかもしれないとしてNULL終了とは何の関係はありませんと仮定して
strcmp(GetMyString(0), myStrings[0]);
ながら
は、うまく動作します。
私のコードで何が問題になっていますか?私は何か見落としてますか?私はtolowerに関する多くの質問を見てきましたが、誰も私の問題を助けることができませんでした。
あなたは未定義の動作をしています。そのためです。 –
このような関数を重大なプロジェクトに使用する必要がある場合は、異なる文字セットの問題を避けるためにboostライブラリに行ってください。 – seccpur
返された後に未定義になるバッファを返しています。 'char(tolower(str [i]))'とはどういう意味ですか? 'tolower(str [i])'は十分なはずです – Holger