• ベストアンサー

動的に配列を確保した時の操作の仕方

---------------- ヘッダ ------------------- typdef struct _TAG { char *mes; // メッセージの先頭アドレス確保 } *pTAG; pTAG ptag; // ポインタ上に長さが違う文字列を確保 char *local_mes[] = { "テスト文字列だよ", "文字列は長さが違うよ", "教えて!goo", }; ------------------------------------------- ---------------- ソース ------------------- void main( void ) { // 先頭アドレスを確保する。 ptag->mes = *local_mes; 【ptag->mesを使い、文字列描画がしたい!】 } ------------------------------------------- ソースコードを長く書いてしまいそうなので、要点だけ絞りました。 【やりたい事】としては、 ptag->mes = *local_mes で、 ptag->mesから文字列を全て描画したいのですが、上手く行きません。 調べたところ、ptag->mesが一次元配列化してるらしく、 "テスト文字列だよ" <-- 16バイト + 1バイト 17バイトptag->mesを進めると、次の行まで行き着きますが、 sizeof関数も上手く扱えません。 sizeof( ptag->mes ) = 4 <? 是非とも解決策をお願いします。 開発環境は、 borland C++ compiler 5.5です。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

サンプル -------- #include <stdio.h> char *str[]={ "test", "for", "next", "while", NULL }; void main(){ char **m=str; while(*m){ printf("%s\n",*m++); } }

jam_with_ju2
質問者

お礼

回答、有難う御座います。 解決策となりました。 ポインタのポインタが、こんなところで役に立つとは; 非常に助かりました。有難う御座いました!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

char **mes; として mes=local_mes; とすれば *mes++ で順繰り全部取り出せるのじゃないかと思います。

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

char *local_mes[] = { "テスト文字列だよ", "文字列は長さが違うよ", "教えて!goo", }; はイメージ的に、 char* s1 = "テスト文字列だよ"; char* s2 = "文字列は長さが違うよ"; char* s3 = "教えて!goo"; を配列に収めたものです。 local_mes[0] = s1 (ポインタ) local_mes[1] = s2 (ポインタ) local_mes[2] = s3 (ポインタ) *local_mes[] = {s1, s2, s3} local_mes[] は一次元配列で、 各要素が文字列へのポインタを格納してるわけです。 >> sizeof( ptag->mes ) = 4 ptag->mes はchar* なので、 sizeof(char*) と同じことです。 *c = "string"; だとして、 c は "string" を指すポインタ(char*)、ポインタのサイズは4。 *c は c[0](=s)、文字(char)のサイズは 1。 だから、 char *c : sizeof(c) = 4, sizeof(*c) = 1 非常に抽象的な答えになってしまいました。 回答というより、ヒントですね。。。

jam_with_ju2
質問者

お礼

回答、有難う御座います。 sizeofは使い方が難しいデス(汗) 大きなヒント、有難う御座いました。 色々と頑張って見ます。

すると、全ての回答が全文表示されます。

関連するQ&A