最初に、あなたの質問の質がやや悪いことを指摘しますが、ご容赦ください。
string *names1 = new string[1];
これにより、1 つの文字列オブジェクトの配列が得られます。
(配列のサイズは、項目を追加すると大きくなります)
間違い。うまくいけば、この特定の目的のためにコードを書いたので、配列のサイズがそうするかもしれません。配列のサイズは自動的に調整されません。(そのためのものvector
です。)
そこに弦を張っています。並べ替え前の配列の項目は次のとおりです。novot svobodovaa novakj6 3 vondraj1234
一列で?または文字列の配列として?後者の場合、次のような証明が必要です。
for ( size_t i = 0; i < size; ++i )
{
std::cout << i << ": " << names1[i] << "\n";
}
理想的には、行の直前に:
qsort(names1, size, sizeof (string), compare);
size
(私は、実際にはの正しいサイズであることを望み、想定してnames1
います。これは、上の私の小さなループが証明するもう 1 つのことです。)
ただし、問題の本当の理由は次の行です。
return ( *(char*) a - *(char*) b);
string *
(オブジェクトへchar *
のポインタ) を (プレーンな古いデータへのポインタ) にキャストしておりchar*
、C++ スタイル ( static_cast< char * >()
) ではなく C スタイル ( ) を行っているため、コンパイラは適切に文句を言うことさえできません。
これら 2 つのポインターを逆参照すると、2 つのstring
オブジェクトの最初のバイトがそれぞれ取得されます。これはおそらく含まれている文字列の最初の文字ではなく、ジャンプ テーブルまたはマシン コードのいずれかです。したがって、ややランダムな結果...