
C言語初心者です。宜しくお願い致します。
puts関数を用いて文字列を出力する場合、
puts関数の引数には、どういった形式のデータを与えれば良いのでしょうか。
char ss[5] = "abcd";
puts(ss); /* ←アドレス */
puts("abcd"); /* ←文字列の値(これもアドレスなのでしょうか) */
puts(ss[0]); /* ←これはダメ?*/
puts(&ss[0]); /* ←これはどうでしょう?*/
言葉使いが正しくない所があるかもしれませんが、
宜しくお願い致します。
No.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文字目だけ~」ということではないんですね!
>const char *、同等に扱われる char *, const char[], char [] 等を与える必要が
「同等に扱われる」といったことに関する知識がまだまだ不足しているようです。
大変勉強になりました。
「引数の型」の見方、についてこれからしっかり勉強していきたいと思います。
初歩的な質問でしたが、基本的なことから教えて頂き、
とても助かりました。
ありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- PHP 【スプレッドシート】順位のつけ方 2 2022/08/17 13:27
- TOEFL・TOEIC・英語検定 どう訳したら良いかわかりません。 2 2022/11/07 12:15
- Excel(エクセル) Excel 値を返す数式についてです 3 2022/11/21 20:08
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) エクセル関数で教えて頂きたいです 3 2023/07/24 14:10
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CStringからchar*への型変換に...
-
C言語のintとcharの違いってな...
-
動的に配列を確保した時の操作...
-
strtok
-
文字列配列を動的に割り当てる...
-
C言語でポインターで詰まってい...
-
簡易版smtpクライアント(メール...
-
ファイル読込時に構造体の文字...
-
可変長構造体をファイルから読...
-
C言語での質問です。
-
カンマで区切った文字の抽出に...
-
ポインタ
-
教えて下さい。
-
ポインタについての質問です。
-
配列の動的確保
-
配列を返す
-
c言語でポインタ変数を用いた配...
-
ポインタを使って回文かどうか...
-
C言語 strstrの実装
-
C言語にて構造体のメンバがNULL...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringからchar*への型変換に...
-
char*を初期化したいのですが
-
C言語のintとcharの違いってな...
-
char型にint型の数値を代入する。
-
C言語にて構造体のメンバがNULL...
-
fgetc( )の戻り値はなぜ整数??
-
char 文字列型 の表現範囲が-12...
-
fstream型オブジェクトを関数の...
-
C++17で、unsigned char * 配列...
-
DWORDとcharの変換
-
文字列内の数字削除
-
new charとnew char[N]の違いは?
-
文字型配列に格納した空白の切捨て
-
C++Builder 2009 テキスト...
-
csvファイルをfscanfで読み込む...
-
文字列の途中から途中までを抽出
-
[C] 構造体メンバーのカンマ区...
-
エクセルのMID関数は、C言語では?
-
小数点入りの文字列をfloat型に...
-
wsprintf( ポインタ , "%d" , "...
おすすめ情報