配列から char を削除しようとしていますが、問題が発生しています。数字でそれを行う方法を読みましたが、私にとっては機能しないため、文字の削除とは異なるようです。
次の配列がある場合:
char stuff[][20] = {"one", "two", "three", "four", "five"};
たとえば、要素「4」を削除するにはどうすればよいので、取得できますか
{"one", "two", "three", "five"};
これを行うには、必要なすべてのメモリ (char* の配列と文字列用のメモリ) を動的に割り当てます。
次に、アイテムを削除せずに別の配列を作成し、残っているすべてのデータをコピーできます。最後に、元の配列と文字列を解放します。
少し複雑ですが、それほど難しくありません。リンクされたリストを作成できれば簡単かもしれませんが、これによりアプリケーションのロジックが少し変わる可能性があります。
C では配列のサイズを変更できません。宣言されているように、stuff
配列には常に 5 つの要素があります (各要素は の 20 要素の配列ですchar
)。
できることは、5 番目の要素の内容を 4 番目の要素にコピーすることです。
strcpy(stuff[3], stuff[4]); // overwrites "four" with "five"
次に、5 番目の要素を空にします。
strcpy(stuff[4], ""); // zeros out the first element in the subarray
また
memset(stuff[4], 0, sizeof stuff[4]); // zeros out entire subarray
いずれにせよ、配列には文字列が含まれます
{ "one", "two", "three", "five", "" }
リスト内の要素の数を本当に変更したい場合(最後の要素を消去するだけでなく)、別の戦略を使用する必要があります。
このような問題は通常、連結リストと呼ばれるデータ構造を必要とします。リスト内の各要素は、次の要素を明示的に指しています。リンクされたリスト内の要素は、配列内よりもはるかに簡単に追加、削除、および並べ替えできます (配列はバッキング ストアとして使用できますが)。Web 上には、(さまざまな品質の) 例が多数あります。ただし、Sedgewick の「Algorithms in C」のコピーを見つけることができれば、それはより良いリソースになります。