• ベストアンサー

C言語について教えてください。

初心者です。宜しくお願いいたします。 /* yuki */ #include <stdio.h> int main() { int hako; char *p[3] = { "kkkkk","oooo","llll" }; for (hako=0;hako<3;hako++){ printf("ポインタ表示%s\n",p[hako]); } return 0; } 整数でポインタの中身を配列出力しているのですが、これをインクリだけで表示することってできないでしょうか??本当はポインタにアドレス入れて入力をインクリしてどんどん入力したいとおもってます。 表示は配列で出したいとおもいます。(他に方法があるのかわからないです^^;) それと、入力なのですが、scanfですと入力待ちになるのですが、getsですとスルーされてしまうことがあるのです。玄人の方々は、これにはいろいろ問題があるみたいに聞いた事があります。それってなぜなのでしょう?? 私の素人感覚では上の二つの使いかたは、変数とキャラ型での使いかたっておぼえました。両方とも数字なのは承知してます。できるときと出来ないときがあるので、そのときになぜ??っておもうことがあるのです。 どうかご指導お願いいたします。

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 とりあえずインクリする方法。コメント付けたので見てください。ポインタが分かってれば理解できるかと。 /* yuki */ #include <stdio.h> int main() { int hako; char *p[3] = { "kkkkk","oooo","llll" }; char **pp = p; /* char **型の変数 */ for (hako=0;hako<3;hako++){ printf("ポインタ表示%s\n",p[hako]); } printf("ポインタ表示%s\n",*pp++); /* 使ってインクリ */ printf("ポインタ表示%s\n",*pp++); /* 使ってインクリ */ printf("ポインタ表示%s\n",*pp++); /* 使ってインクリ */ return 0; }  入力の方は、scanfやgetsに加えて、インクリによるメモリ破壊に気を付けて! ちょっと今サンプル作ってる時間ない。

yuki22
質問者

お礼

お忙しい中お返事いただいてありがとうございます。 ポインタのポインタするのでしたか・・。 メモリ破壊・・・うう、おそろしいです。 あなたの大切なお時間を無駄にしないようにがんばってみます。 ご教授本当にありがとうございました^^

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

その他の回答 (3)

  • 0x131cc6e
  • ベストアンサー率36% (42/115)
回答No.4

gets云々はとりあえず置いといて、インクリメントで表示する、について。 --------- #include <stdio.h> int main( int argc, char *argv[]) {  char *p[] = { "kkkkk","oooo","llll", NULL };  char **pc = p ;  while ( *pc ) printf("ポインタ表示%s\n",*pc++);  return 0; } --------- って感じでヌルターミネータを入れたら++で出来ますよ。 でも入力を受け付けてその結果を表示するならバッファも動的に確保することになるし、そうなると個数管理用変数があった方がいいのでそれを使ってforで回しても大差ないとは思いますが。 (というか、むしろその方がデバッグしやすいかも)

yuki22
質問者

お礼

ポインタはアドレス渡しって覚えていましたがポインタのポインタはちがったのですね。 お返事ありがとうございます。勉強になります。

すると、全ての回答が全文表示されます。
  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.3

>整数でポインタの中身を配列出力しているのですが、これをインクリだけで表示することってできないでしょうか??本当はポインタにアドレス入れて入力をインクリしてどんどん入力したいとおもってます。 データの入力バッファは1つで、それを整理するのに配列を使う様に考えた方が良いです。 ついでに、本来は文字列の文字数数えて、mallocしながらリスト作るとか、スタックに積むとか色んなやり方を練習してみましょう。

yuki22
質問者

お礼

配列を使用した考えの方がよかったでしたか~。 ポインタの知識を深めていきたいとおもってたのですが、ちょっと的はずれだったみたいですね^^; もう少し違った解りやすさを勉強してみようとおもいます。 お返事ありがとうございました。

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

>これをインクリだけで表示することって >できないでしょうか? なにを聞いているのかよくわかりませんが、たぶんできます。でも、そういうことをやる必要はないと思います。 >scanfですと入力待ちになるのですが、 >getsですとスルーされてしまうことがある 逆じゃないですか?でも、これも何を聞いているのかよくわかりません。 質問が抽象的にすぎます。もっと具体的にききましょう。こうやるとこういうエラーが出て失敗するがそれはなぜか?という風に。

yuki22
質問者

お礼

説明不足でもうしわけございません^^; いえ、[hako]とか書くのが沢山になると大変そうなので++で出来ないかとおもったのです。 scanfとgets・・逆でしたか・・、ソースがないのにgetsがスルーされるって言ってもわからないってことですよね・・。ごめんなさい。 いろんなソースを書いていてキャラ型に入力使用getsを使用したら入力待ちにならずにスルーされることが多くて、scanfに変えるとできることが多々あるので、これは??って思ってたのです。 質問の際には具体的に書きますね。 ありがとうございました。

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