これは C++ よりも C コードに似ているので、そのスタイルに固執します。を使用する理由がわかりませんGlobalAlloc
。ここで使用しているとは想像できないDDEにのみ必要です。これが本当に C++ の場合はmalloc
orを使用します。new[]
を必要とする DDE API を実際に使用している場合は、その部分を文字列反転コードから分離してGlobalAlloc
おいてください。GlobalAlloc
2 つの懸念事項を混在させると、コードが保守不能になります。
これが本当に C++ である場合std::string
は、可能な限りこれを使用する必要があります。
また、すべてのキャストとすべての非標準の Windows タイプ マクロには大きな混乱があると思います。コードがほとんど読めなくなります。
Maximus によって指摘されたように、インデックス作成エラーもあります。価値のあるものとして、関数を次のように記述します。
char* Reversed(const char* str)
{
int len = strlen(str);
char* reversed = (char*) malloc(len+1);
reversed[len] = 0;//ensure return string has null-terminator
for (int i = 0; i < len; ++i)
reversed[len-1-i] = str[i];
return reversed;
}
必要なキャストは の戻り値だけですmalloc
。使用する場合はnew[]
、それを行う必要さえありません。その場合、コードは次のようになります。
char* Reversed(const char* str)
{
int len = strlen(str);
char* reversed = new char[len+1];
reversed[len] = 0;//ensure return string has null-terminator
for (int i = 0; i < len; ++i)
reversed[len-1-i] = str[i];
return reversed;
}
常にキャストなしでコードを書くように努めるべきです。
[]
インデックス演算子を使用できる場合は、ポインター演算を自分で実行しないでください。このように読むとはるかに簡単です。