• ベストアンサー

ポインタについて

#include<stdio.h> int main(void) { char str[10]; char *ptr = str; printf("文字列を入力してください。\n"); scanf("%s",ptr); printf("文字列は%sです。",str); return 0; } 上記のプログラムのscanf("%s",ptr);の ptrに&をつけるとなぜ先頭の4文字は入力しても 表示されなくなってしまうのでしょうか? よろしくお願いします。

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

  • ベストアンサー
回答No.1

ptrと&ptrの違いはわかりますか? &ptrを渡すとすると、 char **pptr = &ptr; scanf("%s", pptr); とすることと同じです。データの型が char* とchar** ですから、違っています。 scanfに"%s"を与えた場合、scanfはデータ型がchar*であるとしてデータを設定するので、char**を渡すと型が一致しない変数に無理やりデータを設定していることになります。今は、 > 先頭の4文字は入力しても表示されなくなってしまう というように見えるのでしょうが、それ以外の現象が起こっても不思議ではありません。正しくないデータ操作を行った場合に何が起こるかは予測不能です。

rinnshan
質問者

お礼

なるほど &ptrとするとポインタのポインタ型になってしまい 型が一致しなくなってしまうのですね。 わかりやすい説明ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A