7

どして

#include <iostream>
using namespace std;

int main() {
  cout << (char*)0x10 << endl; 
}

セグメンテーション違反、しかし

#include <iostream>
using namespace std;

int main() {
  cout << (void*)0x10 << endl; 
}

うまくいくようですか?

4

3 に答える 3

9

なぜなら

cout::operator <<(void*) 

メモリアドレスを出力し、

cout::operator <<(char*)

charnullで終了する文字配列を出力し、から配列を読み取ろうとすると、未定義の動作が発生します0x10

于 2012-07-31T22:08:37.943 に答える
4

ostream::operator<<オーバーロードされており、指定されたポインタをnullで終了する文字列として解釈するバージョンがあります。char*

于 2012-07-31T22:09:35.893 に答える
3

<<withには特別なオーバーロードがchar*あるため、Cスタイルの文字列を簡単に出力できます。

したがって

cout << (char*)0x10 << endl; 

(char*)0x10表示されるはずのメモリではない場所にある文字列を出力しようとします。

于 2012-07-31T22:09:00.117 に答える