例: 私はいくつかのテキストを含むファイルを持っています..ような
my name is sunny
i am a student
ファイルから読み込んで保存したいのですが、
a[0][0]=my,a[0][1]=name,a[0][2]=is,a[0][3]=sunny,
a[1][0]=i,a[1][1]=am,a[1][2]=a,a[1][3].
どうすればいいですか?前もって感謝します。
fgets を使用して、テキストの各行を読み取ることができます。a
読み取る行ごとに、最初の次元 (行)にアクセスするために使用するカウンターをインクリメントします。そして、読み取り行ごとに strtok を使用して、行内のすべてのトークンを反復処理します。strtok が返すトークンごとに、ポインターをa[i][j]
インクリメントに関連付ける必要がありますj
。
もちろん、a
char マトリスへのポインタです。
私はそれをテストしていません。それはそれを行う方法の単なる例です。
/* not real value; see limits.h header if you are in POSIX or equivalento to your env */
#define LINE_MAX 128
char line[LINE_MAX + 1];
char contents[MAX_LINES][MAX_WORDS];
char * token;
/* read file line by line */
while(fgets(line, LINE_MAX, fp) != NULL) {
/* split words by white-space */
token = strtok(buffer, " ");
while(token != NULL) {
// token is "my", after "name" and and so on.
// store it into contents array. you can use strcpy() or strncpy() (more safe)
}
}
さて、私はあなたにいくつかの手がかりを与えるつもりです。
最初に次のように宣言 a
します
char a[2][3];
この変数は次のように使用できます。
int main()
{
char a[2][3];
a[1][1]='a';
printf("%c",a[1][1]);
}
次に、を使用 fscanf(f, "%c", a[][]);
してファイルから読み取ります。これについては、インターネットチュートリアルとマニュアルページを参照してください。
他のオプションは、それを動的に行うことです。
次のように宣言 a
します。
char **a;
その後、次のようにメモリを割り当てます。
a = (char**)malloc(2 * sizeof(char*)); //Two times the size of char
これで最初の配列のメモリができたので、配列の各スペースに別の配列を「挿入」します。マトリックスのように考えてください。
for(i=0; i<3; i++)
a[i] = (char*)malloc(3 * sizeof(char));
これはあなたにあなたのマトリックスを与えます。最初のケースのように使用してください。
質問の場合は文字列を読み取るので、charの代わりにこの構造体で同じことを試してください
typedef struct string {
char cadena[6];
}myString;
幸運を!