• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ポインタによる文字列の出力)

ポインタによる文字列の出力

このQ&Aのポイント
  • C++のポインタを使用して文字列を出力する方法について解説します。
  • Visual Studioを使用している場合、ポインタの初期化に関する警告が表示されることがあります。
  • プログラム力が低い場合でも、ポインタを正しく扱うための方法を学ぶことができます。

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

  • ベストアンサー
回答No.3

>""を使ってポインタがさす文字列を変更できるとあるのですが。 あってますよ。 しかし、 char *abc="abcd"; だとしたら、書き換わるのが「ソース上の文字」になっちゃいません? 実際には、一般保護例外が発生します。後ろの文字が"const"(書き換えられない)になっているためです。 さっき#1さんが書いた通りです。 もしも、 char buffer[256]; char *p=buffer; strcpy(buffer,"waaaa"); これなら、OKです。 "waaaa"はCONSTですが、それをbufferにコピーしているからです。 bufferはCONSTではないので、書き換えができるという具合! なので、 buffer[0]='A'; これで出力すれば画面には、 "Aaaaa"と、"w"が書き換えられて表示できますよ! char abc[]="waaaa";との違いは、このように書くと長さが、 "waaaa"の長さまでになるということで、私が書いたようにbufferの256文字まで なら、再度strcpy(...)などで、再代入して使えるだけのメリットです。 なお、文字には最後に"\0"=文字コード0が入っており、 見た目の長さ+1バイトが確保されてますので、そこもご注意を! なお、こうやって「長さをプログラマーが書いている」時代の書き方は 簡単にバッファオーバーフロー(指定の長さ以上をアクセスしてしまいやすい) ことから、今はあまりお勧めできる書き方ではなくなってますが、 ポインタの勉強の時は、逆にわかりやすいかもしれません。

aiueo6391
質問者

お礼

回答ありがとうございます。

その他の回答 (4)

回答No.5

ごめ・・・ char *p=buffer; ↑これを使うのを忘れた^^ これは、char *p = (char *)&buffer[0]; と同じで、 bufferの先頭の位置の「アドレス」をpに入れろ! なので、 (*p)='Z'; ならbuffer[0]='Z';と同じです。(最初のポインタ移動前) なのですが、pはポインタなので、 p++; これで、ポインタがbuffer[1]を指します。 なのでその後の(*p)='A'は、buffer[1]='A'と同等。 という感じで、オフセット位置が動かせます。 おまけですがp[0]=でも、同じことができちゃいますが。 pそのものが動かせるので、使う場合は、今いる位置に注意です。 そのうちなれてくれば・・・ ポインタの場所を格納しておくポインタ。。 なんて、具合が悪くなるソースも出てくる日が来ますよ。。 char **p; <- (ポインタp)へのポインタです。 とか。。

aiueo6391
質問者

お礼

回答ありがとうございます。

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.4

>char buffer[256]; >char *p=buffer; >strcpy(buffer,"waaaa"); 2行目いらない。

aiueo6391
質問者

お礼

回答ありがとうございます。

回答No.2

char* str = "Hello"; ←ここでエラー ~~~~~~~ ~~~~~~ 前半がchar *型で 後半がconst char *型ですよね。 なので、型が違うと言ってます。

aiueo6391
質問者

お礼

回答ありがとうございます。 この初期化の仕方で、実行をする方法はあるのでしょうか? ""を使ってポインタがさす文字列を変更できるとあるのですが。

  • f272
  • ベストアンサー率46% (8625/18445)
回答No.1

普通は初期化するときは配列に代入する。 char str_array[] = "Hello"; char *str = str_array;

aiueo6391
質問者

お礼

回答ありがとうございます。 この章の例題がおかしいのかもわかりませんが、 この初期化の仕方で実行することは不可能なのでしょうか? というかここの例題は使わないのですかね。

関連するQ&A