アプリ版:「スタンプのみでお礼する」機能のリリースについて

Cの
fgets()関数の第1引数の型は、char *で、
fputs()関数の第1引数の型は、const char *
となっていますが、fgets()でchar * に、constが付かないで、fputs()にconstが付く理由って何かあるのでしょうか?

質問者からの補足コメント

  • ここの*は、変数の宣言部分なので、変数の中身ではなくて、ポインタそのもの
    がconstという意味になるんですよね。ただ、この場合、fget()のポイント先として配列(配列は、書き換えられないポインタです。)以外のものを取ることってできるのでしょうか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/04/25 19:22

A 回答 (5件)

>ここの*は、変数の宣言部分なので、


>変数の中身ではなくて、ポインタそのもの
>がconstという意味になるんですよね。

間違い
const char * p
はconst char へのポインタ。
変更出来ないポインタは
char * const p
のようにconstを変数の直前に置きます。

それと
「変数の中味」と「ポインタそのもの」って
どう違うの???
    • good
    • 0
この回答へのお礼

納得しました。素直に、
p in a pointer to char of const
p is a pointer to const of char
または
p is a const of pointer to char
と読めばいいということですね。
ポインタ変数の*記号は、宣言時と宣言時以外では使われ方の意味が違ってくるということです。

お礼日時:2023/04/26 11:03

「ここの*は、変数の宣言部分なので、変数の中身ではなくて、ポインタそのものがconstという意味になるんですよね」という文章の意味がわからない. どういうことをいっている?



あと「配列は、書き換えられないポインタです。」でなにをいいたいのかわからない (配列はポインタじゃない) し, もっといえば「配列」がどのようなものを指しているのかもわからない. あたりまえだが
char buf[100];
char *p = buf;
fgets(p, sizeof buf, fp);
のような形だって可能だ.
    • good
    • 0

>fgets()でchar * に、constが付かない理由



以下の質問を自問自答してみたらいかが?

もし fgets() で char * に、「ポイント先は書き換えない」 という「const」が付いてたら、fgets()で読み込んだ文字列は、いったいどこに書き込めばよいのか?
    • good
    • 0

ポイント先を書き換えない


から書き換えられないポインタで
充分ということ。
この回答への補足あり
    • good
    • 0

fputs()の方では、そのポインタの先の領域を書き換えませんよ、という意味です。


fgets()は、そのポインタの先の領域に値を書き込みます。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2023/04/30 16:16

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