解決済みの質問
>02 がどうして 64fe01 なんですか?
恐らく、変数a,bのアドレスが表示されていると思います。
%xは与えられた変数の値を16進表示するのでaと書いてprintf渡すと、変数aは配列ですので、aと書けばそのポインタの値(=メモリアドレス)がprintfに渡されることになります。
中身を表示したいのであれば、
printf("%#x %#x", *a, *b);
と書けばうまくいくはずです。
投稿日時 - 2001-12-11 12:28:09
お礼
cout では a で 02 が表示されるのに、
printf( ) の場合は a だとアドレスになるから
printf( ) の場合は *a にしないと値が得られないんですね。
投稿日時 - 2001-12-11 21:06:46
1人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(2件中 1~2件目)
文字列を受け付けるのは %s だけです。
なので、文字列を 0x30 0x32 と表示するのでしたら、ループなどにするしかないです。
char *p;
for (p = a; *p; p++) {
printf("%#x ", *p);
}
投稿日時 - 2001-12-11 14:25:08
お礼
0x30 0x32 と表示させることもできました。
#include <iostream.h>
main(){
char a[] = "02";
char *p;
for (p = a; *p; p++) {
printf("%#x ", *p);
}
}
投稿日時 - 2001-12-11 21:16:59
「char a[]」は、「char *a」と同じくポインタ変数の定義です。
実際に領域を確保するわけではありません。
従いまして、char a[] = "02"; では、先頭の"0"のアドレスがaに代入されます。この結果は、ポインタ型変数a,bのアドレスを表示したにすぎません。
投稿日時 - 2001-12-11 12:25:30
お礼
ありがとうございます。
表示されていたのはアドレスだったと分かりました。
#include <iostream.h>
main(){
char a[] = "02";
char b[] = "20";
cout << &a << '\n';
cout << &b << '\n';
printf("%#x %#x", a, b);
}
投稿日時 - 2001-12-11 21:03:37
OKWaveのオススメ
おすすめリンク