C言語を使用して文字列の行を動的に保存したい。
例えば
sadasdasda5245sdf
fadfa6456
fasdf90-70=790
そのような行の数と各行の長さは何でもかまいません.全体を動的に保存する方法はありますか.
C言語を使用して文字列の行を動的に保存したい。
例えば
sadasdasda5245sdf
fadfa6456
fasdf90-70=790
そのような行の数と各行の長さは何でもかまいません.全体を動的に保存する方法はありますか.
必要な要素の最大数を事前に知らなくても、項目を動的に追加できるデータ構造がいくつかあります。リンク リスト、二分探索木、平衡木、試行、ヒープなどがあります。
同様に、さまざまな長さの文字列を動的に割り当てる方法はたくさんあります。
最も簡単な方法は、単純なリンク リストを使用することです。
typedef struct _node {
struct _node *next;
char *value;
} node_t;
リストの最初の項目であるheadを追跡し、次の各フィールドはリストの次のノードを指します。たとえば、リストをトラバースするには、次のように記述します。
currentNode = head;
while(currentNode != NULL) {
/* do something with currentNode->value */
currentNode = currentNode->next;
}
具体的に何をしたいのかわからないので、これ以上の提案はできません。
データ構造に対して頻繁に実行する操作は何ですか? 文字列を単純に反復処理し、文字列を検索し、文字列を追加および削除しますか?
動的に拡張できるデータ構造がいくつかあります。前の2つの返信が示唆するように、ポインターの配列、リンクリストなどを使用できます。
それはすべて、実装の要件によって異なります。
データ構造について少し読んで、自分に最も適したものを決定することをお勧めします。それらはすべて C で実装できます。このウィキペディアの記事
を見てください(理論をスキップしたい場合は、オプションのリストについては「例」セクションに移動してください) 。
一部の回答が示唆するものとは異なり、車輪を再発明する理由はほとんどありません。
独自のライブラリを開発しないでください。このような抽象化を実装するフリー ソフトウェア ライブラリがいくつかあります。一例として、動的に成長する文字列や動的に成長するリストなど、多くの型を持つglibがあります。
歩いてはいけませんが、Princeton の Web サイトにアクセスして、Dave Hanson のC Interfaces and Implementationsを入手してください。と呼ばれるデータ構造Seq_T
は、行のリストを動的に構築するのに最適です。Dave はバッファリング リーダーを提供していませんが、行を有限のバッファに読み込んで、 を使用して結果を変換し、Text_put
1 つのバッファに対して行が大きすぎる場合は、 を使用して結果を結合できますText_cat
。CII コードは、すべての動的な成長を管理します。
%s
動的に格納するには、以下に示すように 'm' フラグを使用できます。
char *variable;
scanf ("%ms", &variable);
/* use variable */
free(variable);
が指す文字列はvariable
、データを保持するのに十分です。
free
使用後の変数に対する責任はあなたにあることに注意してください。