質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

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

C++

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

Q&A

解決済

2回答

1605閲覧

文字列の取得について

strike1217

総合スコア651

C

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

C++

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

0グッド

0クリップ

投稿2017/01/13 12:03

Linux 64bit 環境で行いました。

char *buffer;
scanf("%s", buffer);
printf("%s", buffer);

これで、you will make me happyと入れると、youwill と表示されます。

色々試してみましたが、
scanf("%s", *buffer);
printf("%s", *buffer);

これらは、segmentation faultになりました。

おまけに、printf("%s", buffer);の下に
cin >> buffer

と追加しても、入力待ちにならずに、プログラムが終了してしまいます。

cin >> *buffer
これも segmentation fault になりました。

どうして、こうなってしまうのでしょうか??
どなたか、教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

char *buffer;ではポインター(空の)を定義しただけでメモリーを確保されていないと思いますが。予め余裕のある大きさで例えばchar buffer[256];とかの記述では動作はどうですか?

投稿2017/01/13 12:07

MasahikoHirata

総合スコア3747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2017/01/13 12:09

char buffer [1024]でも試してみたのですが、結果は同じでした。
strike1217

2017/01/13 12:40

あ、できました。 printf("%s\n", buffer);とやったら、you will make me happy で you と表示されまいした。 char *buffer scanf("%s", buffer); このやり方はやらない方がいいんですね。 scanf()とstd::cinを同じプログラム内で使うのには、問題があるんでしょうかね?? どちらかを消すとうまくできるんですが・・・・
MasahikoHirata

2017/01/13 13:35

問題は`scanf`ですね。これも勉強です。今までエラーを出さなかったエンジニアは居ません。このようなエラーで学んでください。また`std::cin`でうまく動いた?ようでも他にも予想外があるかも。まずは関数の製作者のコメントなどを参考に。勉強になります。
strike1217

2017/01/14 05:27

ちょっと、ポインタについては再度質問します。 とりあえず、ベストアンサーにさせてもらいます
guest

0

scanf()は使い方を用心しないといけない関数です。以下のサイトの「scanfの問題点と回避方法」を参考にしてください。
scanf

投稿2017/01/13 12:33

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2017/01/13 12:56

ありがとうございます。 とんでもなく面倒くさいですね・・・・
cateye

2017/01/13 13:39

普通(私の場合)は、fgets()で文字列を格納してsscanf()で取り出すようにします。fgets()は改行まで取り込むので、バッファにゴミが残りませんd^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問