質問編集履歴

1 追記

strike1217

strike1217 score 579

2017/01/14 14:53  投稿

文字列とポインタについてです。
以前、int型のポインタについて、質問しました。
今回はchar型のほうです。
1,
```ここに言語を入力
char *buf;
scanf("%s", buf);
```
これがダメな理由を教えてください。NULLポインタで初期化してもsegmentation faultでした。
Linuxだと、上記のやり方でも、エラーはでませんが、windowsだと強制的に終了します。
```
char buffer[1024];
char *buf = buffer2;
scanf("%s", buf);
```
こちらは問題ありませんでした。
なので、
```
char *buf = "you will make me happy";
scanf("%s", buf);
```
とやってみました。 これもダメでした・・・・
2,
```
char *buf = "123";
buf = "456";
*buf = 'Z';
これは問題がありません。ですが・・・
*buf = "456";
とやるとエラーです。
```
なぜです?? *buf = "456"の方が正しくみえるのですが・・・
buf と *bufの違いがまだよくわかっていません。
3,
```
char str[8];
char *ptr = str;
scanf("%s", &ptr);
```
これはどういうことですか??
実際にやってみて、printf("%s", ptr);とやるとエラーになるんですが・・・
4,
```
char s[] = "ABC";
s = "DEF";
```
これはエラーですね。
なんで、ダメなんですか??
配列の値を上書きするには、他に方法がありますか??
ちょっといろいろ混乱していて、わかりません。
教えてください。
教えてください。
[追記]
int *w, a;
w = &a
printf("%d", *w);
int 型はこうできます。
char *buf = "jfkdoaur";
printf("%s", *buf);これはエラーでした。
printf("%s", buf);
char型の場合はprintf("%s", *buf);ではダメなようです・・・
何が違うんですか??
  • C++

    5262 questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • C

    5388 questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る