• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語のint型の配列が分かりません)

C言語のint型の配列が分かりません

このQ&Aのポイント
  • C言語でint型の配列を使用する際に起きた問題について質問です。
  • printf関数の引数として、char型の配列以外を渡すことができないのか疑問です。
  • puts関数の引数としてはchar型のアドレスを渡す必要があるのですが、printf関数の引数はどのように定義されているのか知りたいです。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

printf の %s に対しては「char へのポインタ」を渡してください. ちなみに「printf関数の定義」については適当なライブラリを調べてください. glibc あたりが見つけやすいかな. プロトタイプは適当な規格を見れば分かる通り int printf(const char * restrict, ...)

marimmo-
質問者

お礼

ありがとうございます. %sはただのポインタではなく「char型」のポインタを受けるのですね. glibcなどまだまだ僕が知らない標準ライブラリがあるのですね. これからもよろしくお願いします.

その他の回答 (2)

回答No.3

int型の配列でも( 無理をすれば )%s表示は可能ですが、 値が{0,1,2}では「文字」ではなく「数値」である為、012とは表示出来ません。 Cはあまり高級な言語ではないので、勝手に変換されてはくれないのです。 int型配列を画面出力する場合には  printf( "%d%d%d", str[0], str[1], str[2] ); とするか、「intの数値配列をcharの文字配列に変換する関数」を作ってください。 何も表示されない原因ですが、 printfで%s出力をした場合、引数としたポインタの先頭から「値がNULL(0x00)」であるところまでが出力されます。 {0,1,2}と値を入れた場合、先頭が0である為、そこで文字列の末尾であると判断されてしまっているのです。 {0,1,2}ではなく{1,2,3}にすれば「とりあえず何か」表示されるかもしれません。 {3355185,0}にするとまた何か表示されるかも。 printfの定義ですが MSDN printf、_printf_l、wprintf、_wprintf_l http://msdn.microsoft.com/ja-jp/library/wc7014hz.aspx 標準関数については上記MSDNで検索すれば大体わかると思います。 ( 蛇足ですが、char str[]={'0','1','2'}も配列なのでご心配なく。 )

marimmo-
質問者

お礼

ありがとうございます. 確かにNULLは\0なのでこれを目印としているなら,最初の0で反応してしまいますね. (質問では2回目,int str[ ]={1,2,3}と書いてしまっていました.書き損じただけでこれは実効していません) printfの定義も見れました. これからもよろしくお願いします.

  • papapa0427
  • ベストアンサー率25% (371/1472)
回答No.1

C言語の基礎ができていないですね。 char str[]={"0","1","2"}は配列ではありません。strというchar型の変数に'0','1','2'という文字データを順番に設定しているだけです。 int型は整数型の変数です。それはお分かりでしょうが、配列は添字で別の変数として取り扱われます。数値データですよ。文字ではありません。 int str[]={0,1,2}とすれば、str(0)に0、str(1)に1、str(2)に2が保存されます。 int str[]={3,6,5}とすれば、str(0)に3、str(1)に6、str(2)に5が保存されます。 int型をprintfで表示させる場合は、printf("%i\n",str(0);となります。3つの変数すべて表示させたいなら printf("%i",str(0); printf("%i",str(1); printf("%i\n",str(2); となります。 なんで文字列を表示するのに数値タイプの配列を使うんでしょうか?全然意味がわかりません。 単純に110とかを表示させたいなら #include<stdio.h> int main(void) { int str=110; printf("%i\n", str); return 0; } で十分でしょう。頭が0の場合、0が表示されなくなりますが、フォーマット指示をすればそれも解決できるはずです。勉強不足ですな。

marimmo-
質問者

お礼

ありがとうございます. 色々なパターンを試しているうちにこれで詰まってしまい質問した次第でした. ただ%iというのが良くわからないです. これからもよろしくお願いします.

関連するQ&A

専門家に質問してみよう