2016-11-17 36 views
-4

私は次のコードを持っています。文字を入力した後、「プログラムが動作しなくなりました」というエラーが表示されます。Cでファイルに書き込むことができません

私はいくつかのデバッグを行い、問題がファイル部分への書き込みにあることがわかりましたが、問題は見つかりませんでした。

誰でも手伝ってもらえますか? characters文字列を格納するのに適合ではないタイプcharであり、あなたのコードでは

#include <stdio.h> 

int main() 
{ 

char characters; 

printf("Input your characters: "); 
scanf("%s", &characters); 

FILE *fp = fopen("File.txt", "w"); 
fprintf(fp, "%s", characters);  
fclose(fp); 

} 
+3

'char characters;'は1文字しか格納しません。 –

+1

あまりにも基本的なので、私はこの話題を話題として閉じようとしています。 – slim

+0

これも起こるのを待っているクラッシュです。ランダムな文字列を書くことでスタックを壊しています – pm100

答えて

1

を(私はCに新たなんです)。 charactersを配列にする必要があります。

%sのために、フードの背後で何が起きるかは、入力されたアドレス(1つでもcharであっても)が与えられたアドレスを指すメモリに格納されますが、その後、バインドされていないアクセスが発生します。これによりundefined behaviorが呼び出されます。 C11を引用

、章§7.21.6.2、fscanf()、(強調鉱山

sは、非空白文字のシーケンスに一致します。 286)

ないl長修飾子が存在しない場合、対応する引数が追加され 配列を受け入れるに十分な大きさの文字列の最初の要素へ ポインタと終端のNULL文字でなければなりません自動的に。

+0

@DatBoiは、この答えを参照してください。 http://stackoverflow.com/q/16870485/2173917 –

+0

@DatBoiメモリを動的に割り当てる(オンラインのやり方を簡単に見つけることができます)か、大きな文字配列を定義します。 –

+0

@RandomDavisはすでにそれを指摘しています。 :) –

関連する問題