変数char **pptr_char
は として始まりますNULL
。しかし、プログラムが進行するにつれて、ユーザーからの文字列入力を受け取ります。各文字列は に格納される**pptr_char
ため、X 次元と Y 次元に動的にメモリを割り当てる必要があります。これはCで可能ですか?
すべての文字列が同じ長さになるわけではないので、次の文字列に移動するにはどうすればよい*ptr_char+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 文字列にメモリを割り当て、そのメモリを指すようにi
thを設定します。char*
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);
....