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

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

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

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

Q&A

解決済

2回答

881閲覧

C言語で入力した文字列をファイル出力

shigeb

総合スコア12

C

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

0グッド

0クリップ

投稿2019/02/17 03:53

前提・実現したいこと

C言語でコマンドライン上で入力した文字をファイル出力するプログラムを作っています。
EOFが入力されるとループを抜けてファイルを出力するようにしたいです。

発生している問題・エラーメッセージ

実際に文字を打つ所で文字を打ち改行するとコアダンプになってしまいます。

該当のソースコード

C

1#include <stdio.h> 2#include <stdlib.h> 3 4int main(){ 5 FILE *opfile; 6 char *txt; 7 8 opfile = fopen("sample.txt","w"); 9 if(file == NULL){ 10 printf("file open failed."); 11 exit(1); 12 } 13 14 while(scanf("%s",txt) != EOF){ 15 fgets(txt,100,stdin); 16 fprintf(opfile,"%s",txt); 17 } 18 19 fclose(opfile); 20}

試したこと

fgets()の最大文字数やstdinを変えてみました。
ネットで色んなソースコードを調べながら組み合わせました。

補足情報(FW/ツールのバージョンなど)

Ubuntu 16.04

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

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

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

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

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

guest

回答2

0

“読み込む領域がない”というのは Louis0616さんと同意ですが。
文字列の読み込みなら、fgets()一つで足りると思います。
あと、題意とは違いますが、if(file == NULL){ のfileは宣言されていません。またint main()の復帰値、通常“return 0;”が抜けています。

投稿2019/02/17 06:06

編集2019/02/17 06:13
cateye

総合スコア6851

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

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

cateye

2019/02/17 06:21 編集

プログラムの終了コード(終了ステータス)というのは結構大事で、正常に終わったかどうかを判断する材料になります。したがって、必ず返すようにしましょうd^^
cateye

2019/02/17 06:35

“EOFが入力される”・・・Ubuntuなら「^d」ctrl+dで終了します。
guest

0

ベストアンサー

文字列を格納する領域を確保していないからです。
mallocで動的に用意するか、配列を使ってください。

C

1char txt[1000];

ところで、scanfとfgetsを重ねる意味はあるのでしょうか。

投稿2019/02/17 03:58

編集2019/02/17 04:19
LouiS0616

総合スコア35660

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

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

shigeb

2019/02/17 06:19

お恥ずかしいです... どうやって書き出すか以前に格納できてなかったんですね...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問