ここから本文です

#include <stdio.h> int main(void) { char str[]={"abc"}; printf("%s\n"...

joy********さん

2012/2/101:09:34

#include <stdio.h>

int main(void)
{
char str[]={"abc"};
printf("%s\n",str);
return 0;
}

C言語の初歩的な質問なのですが上記のソースコードの例で言うとchar型の配列であるstrは配列の型の変数に添字演算子[]をつけないときはその変数の配列の先頭要素のポインタなのですから単にstrで出したらstr[0]のポインタつまり&str[0]と同じですよね?
なのに関数printfでstrを実引数にして表示するとstr[0]のアドレスが出てくると思ったのですがちゃんとabcという文字が出てきます。なぜなのでしょうか?

補足すいません質問の仕方が悪かったです。
アドレス表示したいわけではなくてなぜstrを%s(文字列)で変換するのだったらstr[0]のアドレスの数字を文字に変換するって意味じゃないんですか?

閲覧数:
250
回答数:
2

違反報告

ベストアンサーに選ばれた回答

umi********さん

編集あり2012/2/101:41:36

printf("%p\n",str);

で表示してみる事。

【補足】
%s の場合、対応する引数を char* とみなして、そのアドレスから始まるASCIIZ文字列を表示する仕様になっているから。

質問した人からのコメント

2012/2/7 21:14:10

理解できました。ありがとうございました。

ベストアンサー以外の回答

1〜1件/1件中

ecl********さん

2012/2/111:51:10

>そのアドレスから始まるASCIIZ文字列を表示する仕様になっているから。
ASCIIZ文字列文字列ではありません、ヌル文字で終わるバイト列です。ASCIIに関係なく文字コードでなくても出力できます。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる