1 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 06:39:50 ] C言語の入門者向け解説スレです。 ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 17 pc11.2ch.net/test/read.cgi/tech/1185286631/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 94代目 pc11.2ch.net/test/read.cgi/tech/1185452895/
321 名前:デフォルトの名無しさん [2007/08/23(木) 16:05:44 ] おじゃまします。質問です。 typedef struct{ char a[2]; char b[3]; char c[4]; }AA; typedef struct{ char e[16]; }BB; AA aa; BB bb; …こんなんで、aaに代入された値をbbに一発で書き込んで、 しかもスペースで埋めてくれる関数とかありませんか? VBからCに書き直してたら、LSetで一発だったので。。
322 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 16:13:02 ] 関数使わんでもできるけど、一発(スペース埋めるなら2発か)でやるなら memcpy() と memset() でどうか
323 名前:デフォルト名無しさん mailto:1111111 [2007/08/23(木) 16:18:12 ] >319 ありがとうございました。cd 大野といわれても漢字をコマンド プロンプトに打ち込めないみじめさ。嬉しさも中ぐらいなり、秋の風。
324 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 16:21:37 ] どうしても無理ならマウス使ってコピペ 右クリックかシステムメニューでできる
325 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 16:31:15 ] Alt+半角/全角 で入力できるぜ
326 名前:321 [2007/08/23(木) 16:35:43 ] >322 できました。ありがとうございます!
327 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 16:49:57 ] >>322 ,326 構造体のパディングは大丈夫なのか? 文字列の連結ではないのか? いやできたならいいんだけど。
328 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 17:09:58 ] 同じ型が続いてるなら多分パディングはないんじゃないかなあ。
329 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 17:13:26 ] パディングはcharが並んでるだけだったからあえて書かなかったが LSetの仕様を考慮しないとね。どっちにしても一発は厳しい
330 名前:デフォルトの名無しさん [2007/08/23(木) 19:09:03 ] char *func_b( char *str, char ch ) { char *p; for( p = str; *p != '\0'; p++ ) if( *p == ch ) return p; return 0; } これと同等の処理を行う標準ライブラリ関数を教えてください お願いします
331 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 19:18:28 ] strchr?
332 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 19:18:52 ] strchrかな
333 名前:デフォルト名無しさん mailto:1111111 [2007/08/23(木) 20:06:37 ] Borland
334 名前:デフォルトの名無しさん [2007/08/23(木) 20:23:42 ] >>331-333 ありがとうございます strcharだと char *func_b( char *str, char ch ) じゃなくて char *func_b( char *str, int c) になるんじゃないかと迷ってました
335 名前:デフォルト名無しさん mailto:1111111 [2007/08/23(木) 20:26:41 ] プログラム実行できました。今日中にできるとは思いませんでした。 Borland C++ Compiler のつぎはTurbo Debuggerです。 ありがとう!ありがとう! >293,294,295,314,318, 325さんAlt + 半角/全角や漢字のコピペが可能だとは驚きでした。 まだいろいろ教えていただくこともあろうと思います。
336 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 20:26:46 ] >>321 memset(&bb, ' ', sizeof(bb)); bb = aa; これでいいような気がするんだが、 構造体の要素って順番に並んでるとは規定されてないけどね。
337 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 20:29:48 ] >>334 char *strchr (const char *s, int c) だよ
338 名前:312 mailto:sage [2007/08/23(木) 20:38:42 ] レス遅くなってすいません。 >>316 の[^=]を使う方法を試したのですがうまくできなかったです。。。 strtokを使うしかないって事ですかね
339 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 20:39:29 ] ttp://www.bohyoh.com/CandCPP/C/Library/strchr.html
340 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 20:40:21 ] >>336 >構造体の要素って順番に並んでるとは規定されてないけどね。 またいい加減なことを…ここは入門者が答えるスレ?
341 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 20:41:54 ] >>336 だからgets肯定派のダンディ坂野は回答しなくて良いよって言っただろ? ったく、これだから夏厨は・・・
342 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 21:18:41 ] >bb = aa;
343 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 21:30:38 ] >>336 規定されてるよ
344 名前:336 mailto:sage [2007/08/23(木) 22:11:17 ] >>340 >>336 お、ずっと勘違いしてた。やべ ははははh
345 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:29:21 ] パディングが挟まってる可能性はあるが、順番はそのまま。
346 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 23:08:32 ] 全くの初心者です。質問ですが、 #include <stdio.h> main() { printf("Hello World\n"); } を、Cygwinでコンパイルしたいのですが、うまくいきません。 何故でしょうか。
347 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 23:10:40 ] エラーメッセージを読め
348 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 23:30:46 ] gcc インストールし忘れているに 100 ガバス
349 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 10:08:44 ] >>338 どううまくできなかったのか。 ちゃんと *key は key[128] *value は value[128] とかにしたか?
350 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 17:50:23 ] ヘッダーファイルについて質問なのですが、自作ヘッダーにsleepという関数を 作るとします。実際この関数を使おうと#includeしようとしたら同じく#includeした time.hライブラリーにも同じ関数がある事に気づきました。 同じ名前の関数がある場合、関数の使用優先度って何で決まるんですか?
351 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 17:52:15 ] >>350 多分リンクした順だけど、普通はリンク時にエラーがでると思うよ
352 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 17:56:37 ] 先にldが見つけたほうではないかな? ふつうは自作の関数の名前を変えると思うんだが
353 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 17:57:20 ] そうなんですか。eclipse,CDTで開発してるんですが、予想通りでした。 ありがとうございました。
354 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:37:04 ] >>351 エラーは出ないんじゃないかな。 関数の戻り値なり引数なりの型が違うなら、 コンパイル時にエラーになると思う。 警告かも知れない。
355 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:27:57 ] Japan 1 0 2 Spain 2 0 1 Egypt 1 2 0 のように入力して、数字を左から 3点 0点 1点分と数えて点数の高い順に並べ Spain, 7 Japan, 5 Egypt, 3 のように出力したい場合二次元配列使うと思うんだけど、データの型はどうすればいい? 全部intで出力のときだけ %s,%d で合ってますか?
356 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:44:14 ] >>355 おれだったら、構造体の一次元配列で処理する。
357 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 11:58:03 ] struct hoge { char name[1024]; int mark; }
358 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:24:47 ] 生のデータを持つために、 struct { char name[1024]; int mark[3]; }
359 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:58:54 ] a = (struct A *)buf; b = (struct B *)buf+20; Bの構造体にbufの20バイト後から取り出したいんだけど この記述はできない?
360 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:07:15 ] >>359 の記述のままでもおk でも、>>359 は何か根本的なことが分かっていない気がする
361 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:07:53 ] >>359 bufがchar *などであるなら、 struct B b=*(struct B*)(buf+20)
362 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:09:37 ] >>360 すっとこどっこい。
363 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:17:56 ] offsetとか使いたいのではないのかなあ
364 名前:359 mailto:sage [2007/08/25(土) 22:23:25 ] 一応できた. でもあんまり理解してないorz
365 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 00:57:24 ] システムコールってC言語ですか?
366 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 07:15:28 ] 共用体(union)の中で構造体使うと うまく領域を確保できなくてデータが変になる現象が起きてます。 今は使わない文字配列を共用体の中に書いて 無理やり余裕を持たせて領域確保してるんですが 共用体で使うメモリ領域をうまく確保する方法はありますか? ちなみに環境はVineLinux4.1でgcc3.3.6コンパイラ使ってます。
367 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 07:24:22 ] うまくいかないソースと現象の詳細を示せ
368 名前:366 mailto:sage [2007/08/26(日) 08:00:38 ] 説明しにくいんですけど 2Dのrobocup用ライブラリlibsclientをいじってて http://www.koders.com/c/fidD6E7EBDD071F6F9579D1CAF12EF2FC434F5F7074.aspx 292~295行目 typedef struct _Ppos { WhichTeam team ; // enum(WhichTeam=int) int unum ; } PlayerInfo ; に「int type;」というのを追加してライブラリとプレイヤーを再コンパイルして 実際にサーバーに接続してみたら動作が明らかに変になるんです。 312~317行目 union { PlayerInfo player ;// 292~295行目の構造体 Side side ; // enum(Side=int) FlagPos fpos ; // enum(FlagPos=int) LinePos lpos ; // enum(LinePos=int) } id ; ここに「char hoge[30];」を追加すると問題なく動作するようになるんで 共用体で構造体の大きさの領域が確保できてないという結論に至ったわけです。
369 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:14:49 ] 結論に至る前に sizeof で大きさを調べてみろ
370 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:08:10 ] make cleanしてないんじゃねーの?
371 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:27:06 ] >>365 システムコールはC言語でもサポートされていますが システムコールはC言語ではありません
372 名前:366 mailto:sage [2007/08/26(日) 13:49:54 ] >>370 それでしたorz ライブラリとプレイヤ自体はmake cleanしてたんですが ライブラリを読み込んでるプレイヤ共通の関数をまとめたやつをし忘れてました。 >>367 ,>>369 ,>>370 こんな僕にレスしてくれてありがと
373 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 21:34:06 ] 相談なんですが,ファイルに以下のように保存されていて, a[1]=AAA a[2]=BBB a[4]=DDD これを以下のように新規で追加,削除,変更などしたい場合, a[1]=AAA a[2]=ABC a[3]=DEF 一回全部読み込んでbufなどに保存し,それから一気に全部ファイルへ書き込む方法が あると思いますが,それ以外に方法ありますか?
374 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 21:43:43 ] >>373 固定長レコードもファイルならfseekで該当レコードのところにファイルポインタを 位置決めしてfwriteでレコードを上書き。
375 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 21:53:28 ] >>373 データをファイルの最後尾に書き込みして 読み込み時、重複する場合は「もっとも後ろにあるデータ」を有効とするとか たとえば a[1]=AAA a[2]=BBB a[4]=DDD ↓ a[1]=AAA a[2]=BBB a[4]=DDD a[3]=DEF a[2]=ABC a[4]= 読み込み時にデータ(a[2]=BBB)をデータ(a[2]=ABC)で上書きする感じ a[3] は新規追加、a[2]は変更、a[4]は値なしなので削除
376 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 22:01:50 ] >>374 その標準関数を使ったことないんで調べてみます >>375 その方法も考えたんですが,何回も書き込みを行うとデータが多くなり 読み込むのに時間がかかりそうなんで,有効データだけ残す方法をとりたいですね お二人様サンクスです!検討してみます
377 名前:デフォルトの名無しさん [2007/08/27(月) 17:11:43 ] 超初心者ですみません。 2の0乗+2の1乗+2の2乗+2の3乗+2の4乗+・・・ というプログラムはどのようにしたらよいのでしょうか? いろいろ調べてかいてみたのですができませんでした>< どなたかアドバイスお願いしますm(__)m
378 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 17:19:53 ] 1 + 2 + 2 * 2 + 2 * 2 * 2 + 2 * 2 * 2 * 2 + ...
379 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 17:40:04 ] for(n=1, sum=0;;n*=2) sum+=n;
380 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 17:47:15 ] >>377 しょぼくて申し訳ないが、 int hoge(int count){ int result = 1; if(count <= 0) return 1; for(int i=1;i<count;i++){ result += 2*i; } return result + hoge(count-1); }
381 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 18:12:29 ] 二進法で結果を出力するプログラムならこれでいいよ。 #include <stdio.h> int main(void) { for (;;) putchar('1'); }
382 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 18:14:02 ] // ウンコード int func(size_t n) { int ret = 1; size_t i; for (i = 1; i < n+1; ++i) ret += 1<<i; return ret; }
383 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 18:15:40 ] ウンコードなんて、クソースのパクリみたいだな、¢50徴収するぞ?
384 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 19:00:13 ] >>377 pow(2, n+1) - 1
385 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 19:40:33 ] >>377 ~(~0<<n)
386 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:01:40 ] ビット演算凄いです^o^
387 名前:デフォルトの名無しさん [2007/08/27(月) 21:15:03 ] Javaで言うところの「equals」ってC言語だと何ですか?
388 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:17:00 ] Javaの何のクラスのequals?
389 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:17:59 ] >>387 ==
390 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:18:36 ] >>387 C言語には対応するものはないかな? C++なら、状況応じて==をequals風に定義しなおすことになる。文字列とか。 Javaのように==とequalsを明確に区別することはできない。
391 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:25:34 ] Stringクラスのequalsならstrcmp関数だろ あくまで、文字列比較という意味でね もっとも、equalsメソッドはオブジェクトのデータの比較だから そういう意味なら、オブジェクト指向でないCにはそれに該当するものはない
392 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:31:41 ] memcmp (^^;
393 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:11:53 ] Cの場合、 構造体だと、専用の比較関数作らなきゃならんね。
394 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:18:11 ] Object.equalsだったら、ポインタに対する==演算子が最も当てはまる存在だな。
395 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:27:05 ] 387です 失礼しました、説明が足りなかったようで・・・ Javaでは、([変数].equals("○○○")) と書くところを C言語だとどのように書くのかという意味です
396 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:31:16 ] >>395 何も読んでないのか? クラスによってequalsの挙動は違うだろうが。
397 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:31:47 ] >>395 [変数]の型は何? 派生クラスでオーバーライドできるから、 クラスによって挙動が違い、Cで対応するものも異なる。 なお、Stringなら>>391 。
398 名前:デフォルトの名無しさん [2007/08/27(月) 22:48:56 ] ファイルのプロパティの概要で表示されるタイトルに そのファイルの拡張子を除いたファイル名を設定するプログラムを作成したいのですが どのようにすればタイトルに書き込めるのでしょうか?
399 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:53:24 ] >>395 if (strcmp(変数, "○○○”) == 0) ・・・
400 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:55:30 ] >>398 プロパティ窓を取得、拡張子まで削ってSetWindowText
401 名前:398 [2007/08/27(月) 23:11:00 ] >>400 プロパティ窓はどのようにして取得するのでしょうか?
402 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:17:33 ] >>398 IPropertyStorageでググればいろいろ見付かる。 ただし、Cでやるのは面倒。少なくともC++は欲しい。 なお、この情報は、NTFSの副次ストリームに保管される。 あるいは、OLE構造化ストレージ(2003までWord/Excelファイルなど)なら ファイル自身に保管される(このため構造化ストレージならNTFSでなくても可能)。
403 名前:398 mailto:sage [2007/08/27(月) 23:20:09 ] >>402 Cでは厳しいですか・・ 調べてみます ありがとうございました
404 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:01:37 ] t
405 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 03:30:57 ] >>404 ありがとうございました
406 名前:デフォルトの名無しさん [2007/08/29(水) 11:41:07 ] 377です。 みなさんありがとうございます><
407 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 20:34:19 ] * 引数 :char *data : 追加したい文字列 * : int index : 追加したい位置 * : element *new_data : 新しく追加するリスト * 戻り値:成功1,失敗-1 */ int add_data(char *data, int index, ELEMENT *new_data){ ELEMENT *tmp; int cnt = 0; if(data == NULL || index < 0 || index > element_cnt || new_data == NULL){ return -1; } new_data->data = data; /* インデックスの位置の直前に移動 */ for(tmp = head;cnt != index;cnt++,tmp = tmp->next); new_data->next = tmp->next; tmp->next = new_data; printf("help\n"); return 1; } こんな感じでリスト構造にデータを入れる関数を作ったんですが、 Borlandでは正しく動くのにVisual Studioでは呼び出しもとに返らず終了してしまいます helpというプリント文は表示されます。どなたか、解決策を教えてもらえませんか? ↓がリストの構造体です typedef struct element { char *data; struct element *next; } ELEMENT;
408 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 21:11:45 ] >>407 そのソースだけだとわかんないなぁ 引数の「char *data」はその都度領域確保されているの? それから「element_cnt」って要素数だよね?いつインクリメントしてる?
409 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 21:14:25 ] >>407 デバッガでも使って確かめろ位しか
410 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 21:20:40 ] >>408 そうですよね。>>409 さんのデバッガを調べてみます 「char *data」はただダブルコーテーションで文字列を渡すだけしてます 「element_cnt」については処理を書き込み忘れました
411 名前:408 mailto:sage [2007/08/29(水) 21:31:46 ] >>407 それから追加するインデックスを0にした場合は 実際に追加されるのはインデックス1の場所にならない? 0の場合headを書き換えないとおかしくなるんじゃない? まぁあと/* インデックスの位置の直前に移動 */ といっているけど cnt!=index ってことはindex の位置で止まる で >new_data->next = tmp->next; index+1の要素を新要素の次の要素にする >tmp->next = new_data; indexの次の要素を新要素にする 結局追加される場所はindex+1の場所にならない?
412 名前:407 mailto:sage [2007/08/29(水) 21:50:13 ] >>411 すいません!書き忘れてましたけど、headはstatic変数で今回ダミーとして扱います ちなみにheadはhead->next = NULLで初期化してあります。 for文の初期化でtmp = head;とあるので、head->nextでダミーではない値をもつリストに入るときにはcntは1になっています なのでcnt == indexはひとつ前になるんじゃないかな〜と考えてます。間違えてたらすいません
413 名前:408 mailto:sage [2007/08/29(水) 21:54:23 ] >>412 つまり head->next が最初の要素ってことですね なら納得です だとすると、やはりこのソースからだと分かりませんね 私はここまでです
414 名前:407 mailto:sage [2007/08/29(水) 22:11:13 ] >>413 そうですか、ありがとうございました。 原因はこれだけのソースではわからないと思うので、ななし.orgに全部のソースをアップしました 見てくれるなら見てほしいです。んでVisualStudioで実行してほしいです まだ途中なんでできたらツッコミとかよろしくおねがいします
415 名前:408 mailto:sage [2007/08/29(水) 22:33:26 ] >>414 そういうときはURLも貼ってくれないと ななし.orgってどこですか?
416 名前:407 mailto:sage [2007/08/29(水) 22:43:24 ] すいません。。ここです 77c.org/upload.php?fn=off&page=1
417 名前:408 mailto:sage [2007/08/29(水) 23:02:01 ] >>416 まずここかな void init_list(void){ ELEMENT top; head = ⊤ element_cnt = 0; head->next = NULL;printf("\(^o^)/"); } ELEMENT top; は関数のローカル変数 head = ⊤ top の実体は関数抜けたら無効になる にも関わらず 関数外でhead(top) にアクセスしてる
418 名前:407 mailto:sage [2007/08/29(水) 23:12:46 ] >>417 ああ〜!そうですねw普通におかしいですね
419 名前:408 mailto:sage [2007/08/29(水) 23:16:02 ] >>418 一応こちらの環境(BCC5.5)では>>417 を改善することで動作はします (もう少し動作チェックしてみますが) それから余談ですが、ポインタ配列使うなら ELEMENT next いらないんじゃないですか? せっかくポインタ繋ぎしてるんですから add_data() 内で new_data=(ELEMENT *)malloc(sizeof(ELEMENT)) してみては? いまは動作チェックが目的でこうしているというならゴメンナサイね それから最後にfree()も忘れずに
420 名前:407 mailto:sage [2007/08/29(水) 23:24:18 ] 改善しました!>>408 さん、ありがとうございました! 関数内でmallocはしなくて良い、と言う問題だったので、main側で確保したんです。 自分も関数内で確保した方がいいと思うのですが・・・
421 名前:408 mailto:sage [2007/08/29(水) 23:52:07 ] >>420 そういうことですか 分かりました それらが題意であるならしょうがないですね 余計なことかもしれませんが、 remove_element() は要素を削除するんですよね? この方法(配列上で行う連結リスト)だと要素を削除した後、その後追加する際に、 空いている要素と空いていない(使われている)要素の区別がつかないので その点も考慮していく方がよろしいかと思います