C言語において、あるアドレスを指定して、その中に入っている値を表示する方法は
どのようにすればよいでしょうか。
これに関しては
http://oshiete1.goo.ne.jp/kotaeru.php3?q=377367
にありましたので、試してみましたが、
ptr = (unsigned char *)add ;の部分でセグメンテーションエラーになってしまいました。
No.2ベストアンサー
- 回答日時:
>add=0xad736;
>ptr=(unsigned char *)add;
>printf( "%lx",*ptr);
一昔前のOSなら、そういう事も可能だったのかもしれませんが
今のOSでは出来ません。
基本的に現在のOS(Fedoraを含むLinuxやWindows)では
アプリケーションが参照するメモリアドレスは
仮想メモリ空間のアドレスであって、実アドレスではないのです。
つまり0xad736というのはOSがそのアプリケーションに割り振った値では無いので
無効なアドレスというわけです。
実際試してはいませんが、Linux(Fedora)の物理メモリアドレス参照は
以下のページが参考になるかもしれません。
http://www-online.kek.jp/~yasu/Kenshu/linux-virt …
Windowsならこっち
http://homepage2.nifty.com/DSS/WinSys/Win/DevAdd …
他にも「物理アドレス 参照」などで調べると良いかもしれません。
有り難うございました。仮想メモリ空間のアドレスでしたか。
H8マイコンでのアドレス設定の方法を読んで、パソコンで試してみようと思ったのでした。
大変よくわかりました。
No.3
- 回答日時:
あなたにアクセスする権限がないアドレスを参照することは、
OSによって禁止されています。
#1の補足に書かれたアドレスには意味があるのですか?
一般的には、そのように直接アドレスを指定することは有り得ません。
単純にこういう使い方は、(意味は兎も角)ありですが。
#include <stdio.h>
int main(int argc, char ** argv)
{
char * p = argv[0];
printf("%p:%c\n", p, * p);
return 0;
}
>#1の補足に書かれたアドレスには意味があるのですか
適当な変数を格納した時のアドレスを表示させてところ、この値が出たので、この逆はできないかなぁと思ったのです。
>OSによって禁止されています。
有り難うございました
No.1
- 回答日時:
環境もわからないしどのようなプログラムかもわからないんですが, そこでセグメンテーションエラーが出るとは思えないなぁ.
この回答への補足
早速有難うございます。環境は、Fedora5でソースは下記のとおりです。如何でしょうか?
#include <stdio.h>
int main( void )
{
unsigned char *ptr;
unsigned long int add;
add=0xad736;
//scanf("%lx",&add);
ptr=(unsigned char *)add;
printf( "%lx",*ptr);
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- その他(インターネット接続・インフラ) ブラウザにIPアドレス入力した時 1 2022/06/16 19:08
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 13:13
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語について コマンドラインで >変数 12.00 (char型) と、小数点付きの値を共用体に渡 1 2022/04/22 16:56
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- HTML・CSS ホームページにブログ記事をサムネイル付きで掲載する方法 2 2022/11/25 14:55
- PHP どうして送信されないのでしょうか? 1 2022/12/09 05:23
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3桁区切(コンマ)記号をつけ...
-
str系関数を使わずに二つの文字...
-
C言語プログラミングについて(...
-
charからLPTSTRへの変換方法
-
fgetsなどのときのstdinのバッ...
-
数字文字の出現回数を表示する...
-
scanf()について教えてください
-
C言語の入力した文字を反転させ...
-
大文字を小文字に、小文字を大...
-
C言語をHTMLに整形してくれるツ...
-
c言語
-
あるシーケンスに含まれるある...
-
strcatの処理方法
-
組合せのアリゴリズム
-
c言語プログラミング実行時エラ...
-
C++のコンストラクタを使った自...
-
ヘキサ表現が上手く行かない
-
最近のCPUのほとんどはリトルエ...
-
main の引数には const 付けた方が
-
ファイルから入力した文字数を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
C言語のfor文です。 繰り返しの...
-
文字列から空白を取り除きたい...
-
charからLPTSTRへの変換方法
-
charでの計算?
-
配列をnビットシフトする
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
str系関数を使わずに二つの文字...
-
間接操作のレベルとは
-
int main()の・・・
-
C言語の入力した文字を反転させ...
-
atoi( ) の反対をやりたい
-
switch文で文字を比較すること...
-
テキストデータをそのままバイ...
-
Win32APIでのエディットボック...
-
double型の値をchar配列に変換...
-
干支のプログラム
-
コンパイルエラー invalid ope...
-
間接参照のレベルが異なっています
おすすめ情報