文字列の動的確保とポインタ配列について
C言語についての質問です。
現在、キーボードから文字列を読み込みファイルに保存するプログラムを作成しています。
プログラムの条件は、以下の通りです。
1: キーボードから英数字(最長でMAX_LEN(1000)-1文字)を入力して文字列(文字配列)dataに格納後、画面に表示する。
2: 入力された文字列と同じ長さの文字列を格納する領域を動的に確保し、文字列dataをその領域に コピーする。なお、必要な文字配列の長さは文字列の長さ+1バイトである。
3: 文字列endが入力されるか、入力された文字列がNUM_STRING(10)個になるまで1~2の処理を繰り返す
4: 各文字列へのポインタを格納する(char *)型ポインタの配列str_p(サイズ:NUM_STRING)を定義して利用する。
5:1~2の処理が終了した後で、メモリに格納されたすべての文字列をファイルに出力する。ファイル名はoutput.txtとし、最初の行に文字列の個数を、次の行以降に入力された順番と「逆の順番」で文字 列を出力すること。
実行例
input ->st22
st22
input->st1
st1
end
ファイルの中身
2
st1
st22
現在完成しているプログラムは以下の通りです。
#include<stdio.h>
#include<string.h>
#include <stdilb.h>
#define NUM_STRING 10
#define MAX_LEN 1000
int main (void) {
int n, i;
char data[MAX_LEN] = {};
char *str_p[NUM_STRING];
FILE *fp;
do {
printf("input->");
scanf("%s", data);
if (strcmp(data, "end") == 0) {
break;
} else {
printf("%s\n", data);
n++
2の処理
} while(n <= NUM_STRING);
if ((fp = fopen("output.txt", "w")) == NULL) {
fprintf(stdout, "File open error\n");
}
fprintf(fp, "%d\n", n);
for (i = n-1; i>0; i--)
fprintf(fp, "5s\n", str_p[i]);
fclose (fp);
return 0;
}
特に動的確保のところがよく分かりません。
回答よろしくお願いします。
お礼
ありがとうございます。 試してみましたが、 エラー: 不適合な型: Stringをcharに変換できません: list[i] = Integer.toString(num); といったエラーになってしまいます。
補足
すいません、自己解決しました。 根本的な解決ではないですが・・・ list配列を整数型で作成し、Aの文字の代わりに10、Bの代わりに11を入力し、取り出すときに10ならA、11ならBとして出力(表示)させるようにしました。 ありがとうございました。