0

変数char **pptr_charは として始まりますNULL。しかし、プログラムが進行するにつれて、ユーザーからの文字列入力を受け取ります。各文字列は に格納される**pptr_charため、X 次元と Y 次元に動的にメモリを割り当てる必要があります。これはCで可能ですか?

すべての文字列が同じ長さになるわけではないので、次の文字列に移動するにはどうすればよい*ptr_char+1でしょうか?

それがどのように行われるか考えていますか?

4

2 に答える 2

1

はい、可能です。そして、 th 文字列ptr_char + iに移動するために使用します。i文字列が同じ長さでなくてもかまいません。もちろん、ポインタが同じ長さであることだけが重要です。

                Points to memory location      Memory location contains
ptr_char            X                        a pointer to string1 (string could live anywhere)
ptr_char + 1        X+4 (or 8 for 64-bit)    a pointer to string2 (string could live anywhere)
ptr_char + 2        X+8 (or 16)              a pointer to string3 (string could live anywhere)

したがって、最初に N を保持するためにメモリのブロックを割り当てますchar*(そのブロックはメモリの場所を開始しますX(もちろん、Xオペレーティング システムが選択するものは何でも - あなたは制御できません)。

i次に、 th 文字列にメモリを割り当て、そのメモリを指すようにithを設定します。char*

于 2012-06-30T03:45:08.403 に答える
0

char **pptr_char文字列 (char ポインター) の配列です。pptr_char[0]は最初のポインター、pptr_char[1]は 2 番目のポインターなどであり、これらのポインターが何を指しているかは問題ではありません。文字列を連続メモリ領域に格納したい場合は、次のようにします。

pptr_char    = (char**)malloc(20*sizeof(char*)); // say we have 20 strings max
pptr_char[0] = (char*) malloc(large chunk size)
strcpy(pptr_char[0], "string0");
pptr_char[1] = pptr_char[0] + strlen(pptr_char[0]+1);
strcpy(pptr_char[1], "string1");
pptr_char[2] = pptr_char[1] + strlen(pptr_char[1]+1);
....
于 2012-06-30T04:00:38.380 に答える