0

したがって、データを指すメンバーとしてvoidポインターを持つ構造があります。私はそれが文字の束であることを知っており、サイズ (別のメンバー) を知っています。のような方法で印刷したい

for (in i = 0; i < str.size; i++)
  printf("%c", (char)str.data[i]);

これは、コンパイラによると間違っています。printf に正しいサイズを伝えるために cas を使用する必要があることはわかっていますが、方法がわかりません。どんな助けでも大歓迎です。また、私はC++を使用しているので、もっと快適な方法はありstd::stringますか?

4

2 に答える 2

1

「メンバーとして void ポインターを持つ構造体があります」

data[i]

次と同等です。

*(data + i)

また、void ポインターを使用してポインター演算を行うことはできません。


「おそらくより快適な方法はありstd::stringますか?」

もちろんあります:

char* cdata = static_cast<char*>(str.data);
std::string myStr(cdata, cdata + str.size);
std::cout << myStr;

このソリューションでは、文字列も自動的に null で終了することに注意してください。

于 2013-10-15T12:42:46.110 に答える
0

これを試して:

char *array = static_cast<char *>(str.data);
for (in i = 0; i < str.size; i++)
  printf("%c", array[i]);

または文字列で:

std::string s(static_cast<char *>(str.data), str.size);
std::cout << s;

または str.data の最後の文字が '\0' であることを確認してください。次のように出力できます。

char *array = static_cast<char *>(str.data);
printf("%s", array);

編集

文字の入力配列のサイズを受け取るように変更された文字列コンストラクター

EDIT2

新しい印刷方法

于 2013-10-15T12:43:03.590 に答える