• 締切済み

配列のサイズ変更

FILE *fp; char *fname = "test.txt"; unsigned char init[300]; int i = 0; int c; fp = fopen( fname, "r" ); if( fp == NULL ){ printf( "%sファイルが開けません\n", fname ); return -1; } while( (c = fgetc( fp )) != EOF ){ init[i] = c; i = i+1; } fclose( fp ); 自分のプログラムの中のこのようなテキストから文字を読んで配列に格納するような動作の中で、initを大きめにとっておいて配列に格納し終わったら余った空の配列を削除する、という機能を拡張したいのですがどのようにすればいいかわかりません。 どなたか教えていただけないでしょうか?

みんなの回答

  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.3

平文のテキストの長さが分からないのであれば、いくら配列を大きくしても限界がありますので、必要最低限(CBCモードは詳しくありませんが、逐次的に暗号化していけば、1ブロック長分+αだけでいけるのでは?)の配列だけ確保しておき、逐次、暗号文を別のテキストに書き出して行く方法はいかがでしょうか? 大雑把には下記のやり方です。 1)暗号キー初期値 2)平文のファイルをオープン、暗号文のファイルを作成 3)平文を1ブロック文読み出す 3)平文1ブロック文の暗号化 ⇒ 次の暗号キー 4)暗号文を1ブロック文を書き出す 5)平文のファイルが空になるまで3)から繰り返し 6)平文、暗号文のファイルをクローズ そうでなければ、既に回答のある通り、malloc()を使う方法となりますが、これを使うとしても最初に定義するサイズをどうするか問題ですね。(ファイルをオープンしてからファイルサイズを検索する方法などはありますが。) http://homepage3.nifty.com/mmgames/c_guide/19-01.html 個人的には前者の方が好みですね。

すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4896/10350)
回答No.2

配列の大きさは変更できません。 なぜそんなことをしたいと思ったのかを書くと、役立つアドバイスがもらえるかもしれません。

Whalen
質問者

補足

回答ありがとうございます。 AESの暗号化、復号を行うプログラムを作成しているのですが、その機能としてファイルから文字を読みだして配列に格納→そのサイズ/16バイトの回数だけCBCモードで暗号化したいです。 しかし、現状配列のサイズをあらかじめ定義しているため、そのサイズよりテキストが長いと暴走してしまい、それより短すぎると余分な配列が多くなってしまい、暗号化を余分に行ってしまいます。

すると、全ての回答が全文表示されます。
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

配列のサイズ変更はできません。 やるとすればmalloc(),realloc()を使っての配列の代用です。

すると、全ての回答が全文表示されます。
このQ&Aのポイント
  • JUNO-DSのシリアルナンバーが見つからない場合の対処法を探る質問です。
  • シリアルナンバーはどこに記載されているのか、ユーザーが困っていることを共有。
  • 電子楽器の特定の部品に関する情報を求めており、解決方法を提案依頼。
回答を見る

専門家に質問してみよう