0

私はポインタに不慣れで、誰かが私のコードを見て、なぜエラーが発生するのか教えてくれないかと思っていました。「CharからCharへの無効な変換。

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main (int argc, char * const argv[]) {
    int stringlenght;
    string  input;

    cout << "Please enter a  string >";
    getline(cin,input);
    cout << "You entered: " << input  << endl << endl;

    stringlenght=input.length();
    cout << stringlenght;

    char *inputArray[stringlenght];
    for (int i=0; i < stringlenght; i ++) {
        inputArray[i]=input[i];
    }

    //system("pause");
}
4

3 に答える 3

1

ここにこの行:

inputArray[i]=input[i];

は型ではなくinputArray配列であるため、代入演算子の右側で使用されたときに型のメソッドによって返される実際の型右辺値をポインターに割り当てることはできません。ポインタタイプには、実際のアドレス値を割り当てる必要があります。次のように変更してみてください。char*charcharoperator[]string

inputArray[i]=&input[i];

これを行うと、オブジェクトに対する操作によって、 ...stringに格納されているこれらのポインタが無効になる可能性があることに注意してください。inputArray

于 2012-05-16T21:49:08.073 に答える
1

この例の問題は、inputArrayを文字へのポインターの配列として宣言しているため、inputArray[i]が文字へのポインターになることです。

あなたがしようとしているのは、inputArrayのi:番目の位置にあるポインタに文字値を割り当てることです。

あなたがやりたいと思うのは、inputArrayを次のように宣言することです。

char *inputArray = new char[length];

... your loop ...

delete []inputArray;

これにより、代わりに1つのポインターが作成され、文字を格納できるメモリー内の連続した領域を指すようになります。したがって、inputArray[i]のタイプはchar*ではなくcharになります。

于 2012-05-16T21:52:08.247 に答える
0

あなたの行 char *inputArray[stringlenght]; はポインタの配列を定義しています。代わりに、charの配列を定義しようとしているのではありchar inputArray[stringlenght];ませんか?

この場合、charをcharにコピーするのと同じように、入力の要素をinputArrayにコピーすると機能します。

于 2012-05-16T21:52:06.447 に答える