ポインタ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
研修生

ポインタ

#1

投稿記事 by 研修生 » 16年前

文字列のポインタを3つ進めてから2文字分だけ取りだすプログラムです。
int main()
{
  char *p="VisualC++";
  char *q;
  
   for(int i=0;i<3;i++){
     *p++;
   }
   
   for(i=3;i<5;i++){
     *q++=*p++;
   }
 
   cout<<q;
   return 0;
}

としたのですが、プログラムに問題が発生しましたとでます。どこが悪いのかはわかっていますが
どうすればいいのかがわかりません。教えて下さい。

初級者

Re:ポインタ

#2

投稿記事 by 初級者 » 16年前

どこに問題があるかおわかりとのことですが、
具体的にはどこですか?

研修生

Re:ポインタ

#3

投稿記事 by 研修生 » 16年前

for(i=3;i<5;i++){
*q++=*p++;←ここです
}
デバッグでここで止まりました。

ouh

Re:ポインタ

#4

投稿記事 by ouh » 16年前

デバッグでとまるのはそこかもしれませんが、まず直さないとだめなのは
char *q;
です。

それを直したうえでの話ですが、
*p++;
じゃなくて
p++;
としないと。

そもそもfor文使わなくても
p += 3;
だけでいいです。

Mist

Re:ポインタ

#5

投稿記事 by Mist » 16年前

No:32578はqは実体をもたないポインタだからダメです。
実体を定義してそのアドレスをqにセットしてください。

提示のプログラムには他に問題あるからこれだけ直しても駄目だけどね。

研修生

Re:ポインタ

#6

投稿記事 by 研修生 » 16年前

ですね。char *qがおかしいから←でとまります。
原因がわかりません

ouh

Re:ポインタ

#7

投稿記事 by ouh » 16年前

>ですね。char *qがおかしいから←でとまります。
>原因がわかりません

それについてはMistさんが回答してくださっているんですが、
答えを言ってしまうと、
char q[3];
としてあとのコードを考えるといいと思います。

研修生

Re:ポインタ

#8

投稿記事 by 研修生 » 16年前

あ、すいません。その回答を見たのは書き込み後でしたので。

Mist

Re:ポインタ

#9

投稿記事 by Mist » 16年前

> ouhさん

> *p++;
> じゃなくて
> p++;
> としないと。

一応言っておくとこの部分は間違いではないです。
*を付ける必要がないのはその通りですが

*p++



*p;
p++;

を短縮しただけなので、ポインタは研修生さんの意図通りに進んでいます。

研修生

Re:ポインタ

#10

投稿記事 by 研修生 » 16年前

なんか難しいですね。

ouh

Re:ポインタ

#11

投稿記事 by ouh » 16年前

> Mistさん
ご指摘ありがとうございます。おっしゃる通りですね。浅はかでした。

> 研修生さん
すみません。*p++; でも研修生さんの意図した結果になります。
でも p++; と書きましょう。

草なぎ剛容疑者

Re:ポインタ

#12

投稿記事 by 草なぎ剛容疑者 » 16年前

こんな風にしたかったのでしょうか。

#include <iostream>

using namespace std;

int main(void)
{
    char *p = "VisualC++";

    p += 3, cout << *p;
    p++, cout << *p;
    return 0;
}

Naohiro19

Re:ポインタ

#13

投稿記事 by Naohiro19 » 16年前

このプログラムのデバッグ結果です。:
>Run-Time Check Failure #3 - The variable 'q' is being used without being defined.
>test.exe の 0x00416d95 でハンドルされていない例外が発生しました : 0xC0000005: 場所 0xcccccccc に書き込み中にアクセス違反が発生しました。 。

閉鎖

“C言語何でも質問掲示板” へ戻る