2016-09-09 7 views
-1

私は非常に基本的な質問がありますが、私はちょうどそれの周りに私の頭を得ることはできません。 文字列内の各文字のメモリアドレスを取得する方法がわかりました。例えば文字列からメモリアドレスを取得する方法は?

string str("Test"); 
    cout << size(str) << endl; 

私は、この文字列が4バイトであるため、これは、この4を返します知っているが、どのようにすることができます私は、出力画面上の各バイトのメモリ住所がを?

私はこの

string s = "abcd"; 
string::iterator pos; 

for (pos = s.begin(); pos != s.end(); ++pos) { 
     cout << &pos << endl; 
} 

cin.get(); 
return 0; 

を試してみました。しかし、これは出力されます:

00AFFB8C 
00AFFB8C 
00AFFB8C 
00AFFB8C 

しかし、それはのようにいろいろ書いにする必要がdoesntの:だから誰もがアイデアを持っているん

00AFFB8C 
00AFFB8D 
00AFFB8E 
00AFFB8F 

私がここで間違っているのは何ですか?

+0

同じ場所に同じアドレスが格納されているため、同じアドレスが表示されます。 – Shravan40

+0

ああ、間違っている。 'size(str)'は、 'std :: string'オブジェクト内のテキストのサイズではなく、' std :: string'オブジェクトのサイズを返します。 'std :: string :: length()'を試して文字列の長さを取得してください。 –

+2

@ThomasMatthews - 'std :: size(c)'は 'c.size()'を返します。あなたは 'sizeof'を考えているようです。 –

答えて

1

だけにあなたのループを変更:&*posstd::ostreamないあなたが望む方法で印刷されるであろうchar *を入力しているため、

for (pos = s.begin(); pos != s.end(); ++pos) { 
     cout << static_cast<void*>(&*pos) << endl; 
} 

static_castが必要です。

1

イテレータのアドレスを印刷しているため、同じアドレスが表示されます。

これにあなたのコードを変更

異なるアドレスを与える
for (pos = s.begin(); pos != s.end(); ++pos) { 
     cout << static_cast<void*>(&(*pos)) << endl; 
} 

、私のマシン上で、たとえば:

0x7fff5a7a09cf 
0x7fff5a7a09d0 
0x7fff5a7a09d1 
0x7fff5a7a09d2 
+0

-1文字は同じアドレスに格納されません。文字が同じアドレスに格納されている場合は、最後の文字だけが表示されます。 –

+1

イテレータのアドレスは変更されていません。 OPはイテレータのアドレスを出力していますが、イテレータは変更されません。イテレータの内容は変化しています。 –

+0

ええ、私はあなたが答えを投稿している間に見つけました...今はあなたを@ThomasMatthewsにコピーしたように見えますが、私は-2を持っているので、私はそれを削除すべきですね...でも+1も見つけてください! :) – gsamaras

2

間違ったので、多くのことを。

私のコメントで述べたように、sizeof(str)はオブジェクト内のテキストではなくstd::stringオブジェクトのサイズを返しています。 std::stringオブジェクトは任意の長さ(テキストを含まず、オブジェクトの外部に格納されている可能性があります)です。

std::string::iteratorはイテレータオブジェクトです。反復子が指し示す内容ではなく、のイテレータのアドレスまたは場所を連続して印刷しています。

std::stringオブジェクトのテキストの場所を指定する場合は、std::string::data()メソッドを参照してください。

+1

コードは 'sizeof'を使用していません。それは 'std :: size(str)'を使っています。これは 'str.size()'を返します。 –

+0

@PeteBecker:いつ 'std :: size'が導入されましたか? (ありがとう) –

+0

@ThomasMatthews C++ 17。 –

関連する問題