0

unsigned long を char* にキャストするにはどうすればよいですか。

私は次の for ループを実行しています

for (unsigned long i = 1; i< 7;i++)
{
    callAMethod(5,i);
}

メソッドの定義は次のとおりです。

callAMethod(int, const char*)

これを行うと、次のエラーが表示されます。

invalid conversion from `unsigned long' to `const char*'

どうすればいいですか?

4

2 に答える 2

1

古い C ポインター演算:

for (unsigned long i = 1; i< 7;i++)
{
    callAMethod(5, (const char*)(&i));
}

しかし、この方法では、long の 8 バイトのうちの 1 バイトしか取得できません。long の文字列表現を取得しますか? STL を利用して str() を取得できます。

于 2013-07-19T00:08:45.980 に答える
0

「const char*」は「文字のアドレス」を意味します。1 <= n < 7 の値を渡します。

キャストすることにより、有効な文字へのポインター値であると見なすようにコンパイラーに要求できます。

callAMethod(5, reinterpret_cast<const char*>(i));

ただし、アドレス「1」のメモリを読み取って char を検索しようとすると、アプリケーションがクラッシュする可能性があります。

あなたの「callAMethod」はCスタイルの文字列を期待しているようです。これは、文字列の終わりが値0の文字で示される任意の文字列です。

const char hello[6] = { 'h', 'e', 'l', 'l', 'o', 0 };

const char* hello = "hello"; と同等です。

(C/C++ のように引用符で囲まれた文字列を記述すると、コンパイラは格納された文字列の末尾に 0 バイトを自動的に追加します)。

通常、文字列を関数に渡す場合、フィンガープリントは「const char*」です。

したがって、実際に知りたいのは「長い値から文字列を作成する方法」であり、答えは「printf」です。

char str[20];
for (unsigned long i = 1; i < 7; ++i) {
#ifdef _MSC_VER
    sprintf_f(str, "%u", i);
#else
    snprintf(str, sizeof(str), "%u", i);
#endif
    callAMethod(5, str);
}
于 2013-07-19T04:11:50.360 に答える