getBack3(char*)というのを作りました。この関数は「与えられた文字列の後ろ3文字を返す」という仕様です。"bcd"ですが、文字列やポインタなどの概念をしっかりと把握していないせいか、自分の思うように動きません。word;}getBack3("abcd")と与えるので、戻り値は"bcd"がなることを期待しています。関数内では正常に"bcd"を"abcd"から取得しているようですが、main()に戻ってくると以下のように文字化けします。どなたかお助けお願いします。");puts(back3_2);追加して実行すると、この追加したコードは思った通りの動作を実現してくれます。strcpy()を使わない方法を教えて下さい。単純にwordがローカルスコープなのと返しているのがアドレスなので変なアドレスが返ってきているパターンだと思うのでアドレスで出力してみてください。いいのはchar*ではなくC++なのだからstd::stringを使うことです。C言語を使うと自分の足を誤って撃ち抜いてしまうことがある。C++を使えばそのような間違いを犯しにくくなる。やってしまったときには足全体が無くなる。間違えた、アドレス先の内容が消失していると思うので関数の宣言を変えるかstd::stringを使いましょうC言語を使うと自分の足を誤って撃ち抜いてしまうことがある。C++を使えばそのような間違いを犯しにくくなる。やってしまったときには足全体が無くなる。6年前KORYUOHさんありがとうございます。して、ローカルスコープ変数wordの値は関数終了時に破棄されるということですか!?うまくいかない理由が見えて来ました(このプログラム以外にも何度も起きているので・・・)。まま、getBack3()を使うには、wordはグローバル変数にする方法しかないということですよね?引数を増やすのは嫌なので・・・C++で書いている理由は、Cより変数の宣言が自由な場所でできるからです。本当はC言語をもう少し深めようと思っています。stringを使うのまた違う機会にしたいと思います。呼び出し元で編集するということがないのであれば、この仕様なら引数のポインタを進めたポインタを返すのもありかなぁと。以下、こんなイメージ。時間が開いてしまいました。>間違えた、アドレス先の内容が消失していると思うので関数の宣言を変えるかstd::stringを使いましょう。原因がわかってスッキリしました!ありがとうございます。Blueさん「うしろ3文字」なら、確かにBlueさんの方法もありですね。気が付きませんでした。本当に文字列を取得したいとき、特定の条件の文字列の位置を返すときとで使い分けたいと思います。ありがとうございます。ミクプラは自由にリンクできます。