• ベストアンサー

printf("%x", str)

#include <iostream.h> main(){ char a[] = "02"; char b[] = "20"; printf("%#x %#x", a, b); } 結果 → 0x64fe01 0x64fdfe もし結果が 0x30,0x32 0x32,0x30 という感じなら分かるのに 02 がどうして 64fe01 なんですか?

  • A__
  • お礼率59% (194/328)

質問者が選んだベストアンサー

  • ベストアンサー
  • MarrowG
  • ベストアンサー率53% (41/76)
回答No.2

>02 がどうして 64fe01 なんですか? 恐らく、変数a,bのアドレスが表示されていると思います。 %xは与えられた変数の値を16進表示するのでaと書いてprintf渡すと、変数aは配列ですので、aと書けばそのポインタの値(=メモリアドレス)がprintfに渡されることになります。 中身を表示したいのであれば、 printf("%#x %#x", *a, *b); と書けばうまくいくはずです。

A__
質問者

お礼

cout では a で 02 が表示されるのに、 printf( ) の場合は a だとアドレスになるから printf( ) の場合は *a にしないと値が得られないんですね。

その他の回答 (2)

noname#30727
noname#30727
回答No.3

文字列を受け付けるのは %s だけです。 なので、文字列を 0x30 0x32 と表示するのでしたら、ループなどにするしかないです。 char *p; for (p = a; *p; p++) { printf("%#x ", *p); }

A__
質問者

お礼

0x30 0x32 と表示させることもできました。 #include <iostream.h> main(){ char a[] = "02"; char *p; for (p = a; *p; p++) { printf("%#x ", *p); } }

回答No.1

「char a[]」は、「char *a」と同じくポインタ変数の定義です。 実際に領域を確保するわけではありません。 従いまして、char a[] = "02"; では、先頭の"0"のアドレスがaに代入されます。この結果は、ポインタ型変数a,bのアドレスを表示したにすぎません。

A__
質問者

お礼

ありがとうございます。 表示されていたのはアドレスだったと分かりました。 #include <iostream.h> main(){ char a[] = "02"; char b[] = "20"; cout << &a << '\n'; cout << &b << '\n'; printf("%#x %#x", a, b); }

関連するQ&A

  • printfの使い方

    #include <stdio.h> main() { printf("正しい?"); int a; int b; int c; printfをこのように使うと int がここでは 宣言できないとなってしまうのは何故ですか?

  • str系関数を使わずに二つの文字を結合する方法

    自分で色々考えていたのですが中々分からなくて・・・ #include<stdio.h> #include<string.h> int moji(char* b1,char *b2) { char b[11]; int x; strcpy(b, b1); strcat(b, b2); x = strlen(b); return x; } main() { char a[4] = "alt"; char b[8] = "recorde"; int c; c = moji(a, b); printf("文字数は%d\n", c); } のプログラムでmoji関数の部分にあるstr~を全部接続節(for)等で作成してポイントで持ってきた文字を連結するにはどうすればいいでしょうか? strに慣れて自分で作れなくならないためにもお力をかしいただけると嬉しいです。

  • printfについて

    他サイトにて非常に興味の有るコードがあったのですが、そのサイトは訳合って見れなくなってしまったのでこちらで聞かせてください。 下記のprintfの中の、%.*sはどう解釈したら良いのですか? % . * s それぞれどういう意味が有るのですか? 始めて見るパターンなので分かりません。 #include <stdio.h> #include <stdlib.h> #include <locale.h> int main(void) { char a[] = "あいaう"; char *p; int len; setlocale(LC_CTYPE, ""); for (p = a; *p; p += len) { len = mblen(p, MB_CUR_MAX if (len <= 0) break; printf("%d: %.*s\n", len, len, p); } return 0; }

  • printf文で"という文字を出力したい

    #include <stdio.h> #include <stdlib.h> #include <string.h> main() { printf("a"b"c\n"); } 標準出力でa"b"cと出力したいのですが、エラーが出てしまいます。 printf文で"を出力することは可能なのでしょうか。 教えてください、お願いします。

  • C言語による浮動小数点表示

    #include<stdio.h> #include<math.h> main() { float a=1.5*pow(2,-15); unsigned char *e; e=(unsigned char *)&a; printf("a=%02x,%02x,%02x,%02x\n",*(e+3),*(e+2),*(e+1),*(e+0)); } というプログラムで a=38,40,00,00 という結果がでたのですが これは何を表しているのでしょうか? よろしくおねがいします

  • %P と %X の違い

    アドレスを表示させるときの、%p は、%x と同じ16進数で表示される んでしょうか? 表示の違いと言えば、大文字か小文字の違いだけなんでしょうか? 16進数の大大文字は「%X」というふうに、Xを大文字で指定すれば、 結果も大文字で表示されますよね。 %pはどういった意味なんでしょうか? #include <stdio.h> main() { char a; short b; printf("bのアドレスは%d,%p,%x\n", &b, &b, &b); return 0; }

  • このソースは間違っていますか?

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ #include<stdio.h> #include<stdlib.h> #define MAXLINE 256 int main(void); int main(void) { char buffer[MAXLINE]; int x; int y; char a; char b; printf("一人目の名前を英数字で入力してください。\n"); gets(buffer); a = at

  • printfがなくても文字が現れるのはなぜ!?

    #include <stdio.h> #include <string.h> int main() { int hensuu = 0; int *p; p = &hensuu; printf("p=%p &hensuu=%p\n", p, &hensuu); printf("*p=%d\n", *p); *p = 100; printf("*p=%d\n", *p); printf("hensuu=%d\n", hensuu); }  以下、出力結果です。    p=0xff930a1c &hensuu=0xff930a1c *p=0 *p=100 hensuu=100  以上が結果ですが!   *p=100 は*p = 100;で終わっていますが!出力結果として文字が出てきたいるのはなぜですか!  宜しくお願いします。

  • strcatの処理方法

    #include <iostream.h> #include <string.h> int main(){char a[]="a";char b[]="b"; char c[]="c"; for(int d=0;d<3;d++){strcat(a,b); strcat(a,c);cout<<a;}} このc言語プログラムの実行結果を、abcbcbc したいのですが、例外処理されます。解決方法お願いします。後、又簡単な連結方法教えてください。

  • 文字列の処理

    #include <iostream.h> main(){ char x[1]; //ここで あいうえお という5文字を入力 cin >>x; ? } ↑いうえ という文字を cout << で表示するにはどうしたらいいんですか?