0

私はこれを PPString と呼ばれるクラスにしています:

PPString.h

#ifndef __CPP_PPString
#define __CPP_PPString

#include "PPObject.h"

class PPString : public PPObject {
    char *stringValue[];
public:
    char *pointerToCharString();
    void setCharString(char *charString[]);
    void setCharString(const char charString[]);
};

#endif

PPString.cpp

#include "PPString.h"

char *PPString::pointerToCharString() {
    return *stringValue;
}

void PPString::setCharString(char *charString[]) {
    *stringValue = *charString;
}

void PPString::setCharString(const char charString[]) {
    *stringValue = (char *)charString;
}

私はstringValueusingを設定しようとしていstd::cinます:

main.cpp

PPString myString;
myString.setCharString("LOLZ");
std::cout << myString.pointerToCharString() << std::endl;

char *aa[1000];
std::cin >> *aa;
myString.setCharString(aa);
std::cout << myString.pointerToCharString() << std::endl;

a を使用する最初のものはconst char機能しますが、2 つ目は a を使用charしないため、次の出力が得られます。

STDOUT からのコピー アンド ペースト

LOLZ
im entering a string now...
Bus error

2行目は入力したもので、returnキーを押します。

誰でもこれを修正するのを手伝ってもらえますか? ありがとう...

4

4 に答える 4

3

シグニチャを持つsetCharStringは、char *s[]へのポインタの配列の最初の要素を逆参照していchar*ます。割り当てられていません。の宣言をに変更するaachar aa[1000];、おそらく実行されます。

他にもいくつかの問題があります(他の人からも指摘されています)。変数への割り当ては、割り当てstringValueられていないように見えるメモリの間接参照でもあります。[]使用法を言うのは難しいですが、宣言がないはずです。さらに、割り当てはスタックメモリへのポインタを格納しています。これは、別の関数呼び出しの後で無効になる可能性があります。

于 2010-04-25T13:27:48.950 に答える
1

あなたが言う時:

char *aa[1000];
std::cin >> *aa;

*aa にはメモリが割り当てられていません。ここで同じ種類の問題:

char *stringValue[];

また、この名前__CPP_PPStringは C++ で予約されており、2 つのアンダースコアを含む名前、またはアンダースコアと大文字で始まる名前はすべて予約されています。独自のコードでそれらを作成することは許可されていません。

于 2010-04-25T13:24:39.237 に答える
1

char *aa[1000];あなたがそうであると思うものではありません。1000char *の配列です。

std::string代わりに使用してください。そうすれば、誰かが 1000 文字を超える文字を入力してプログラムを悪用する心配がなくなります。

例えば

std::string input;
std::cin >> input;
于 2010-04-25T13:25:45.677 に答える
0

どのコンパイラを使用していますか?別のコンパイラを使用するか、使用しているコンパイラのすべての警告を有効にしてみてください。コンパイラはこのコードのエラーを通知するはずです。実行時に調べる必要はありません。

たとえば、Comeauonlineは次のことを教えてくれます。

"ComeauTest.c", line 4: error: incomplete type is not allowed
      char *stringValue[];
            ^

"ComeauTest.c", line 23: warning: variable "aa" is used before its value is set
  std::cin >> *aa;
于 2010-04-25T13:35:48.560 に答える