重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

C言語初心者です。宜しくお願い致します。

puts関数を用いて文字列を出力する場合、
puts関数の引数には、どういった形式のデータを与えれば良いのでしょうか。

char ss[5] = "abcd";

puts(ss);  /* ←アドレス */

puts("abcd");  /* ←文字列の値(これもアドレスなのでしょうか) */

puts(ss[0]); /* ←これはダメ?*/

puts(&ss[0]); /* ←これはどうでしょう?*/

言葉使いが正しくない所があるかもしれませんが、
宜しくお願い致します。

A 回答 (1件)

そういうのに悩んだ場合は、引数の型を確認しましょう。


putsの引数は型は const char * になっていると思います。つまり、期待した動作をさせるには、const char *、同等に扱われる char *, const char[], char [] 等を与える必要があります。

> puts("abcd");  /* ←文字列の値(これもアドレスなのでしょうか) */

Cでは、このような文字列定数(文字列リテラル)は、どこかの領域にその内容の文字列が用意され、そこへのポインタになります。よって、これも「アドレス」です。

プログラム風にしたらこんな感じ
const char どこかの領域[]= {'a','b','c','d','\0'} ;
puts( どこかの領域 ) ;

> puts(ss[0]); /* ←これはダメ?*/

char []の一つ一つの要素はcharです。 char と const char *とはまったく別の型なのでダメです。

> puts(&ss[0]); /* ←これはどうでしょう?*/

ss[0]がcharなので、 &を付けるとそのアドレス( char * )になります。型としては正しいです。
もっとも、&ss[0] == ss なので、puts(ss)と同等の結果になります。
「1文字目だけ出力される」というようなことはありません。

この回答への補足

>もっとも、&ss[0] == ss なので、puts(ss)と同等の結果になります。
>「1文字目だけ出力される」というようなことはありません。

こちらも、参考になりました。
「1文字目だけ~」ということではないんですね!

補足日時:2010/11/11 09:44
    • good
    • 0
この回答へのお礼

>const char *、同等に扱われる char *, const char[], char [] 等を与える必要が

「同等に扱われる」といったことに関する知識がまだまだ不足しているようです。
大変勉強になりました。
「引数の型」の見方、についてこれからしっかり勉強していきたいと思います。

初歩的な質問でしたが、基本的なことから教えて頂き、
とても助かりました。
ありがとうございます!

お礼日時:2010/11/11 09:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!