キーボードから入力を取得するために scanf の引数として
渡す方法がわからないscanf
変数を( を使用して) キーボードから読み取ろうとしています。どうすればいいですか?char *path
path
PSこれは私が試したことです:
char *filePath = "";
printf("Path: "); scanf("%s", &filePath);
しかし、私のアプリケーションは常に停止します。
char *filePath = "";
コンパイラは、上記のステートメントについて警告する必要があります。filePath
型はconst char*
ありませんchar*
。
filePath
空の文字列リテラルを指しています。文字列リテラルは読み取り専用の場所にあり、編集することはできません。
割り当ててメモリを使用してmalloc
から、入力を取得する必要があります。完了したら、それを行う必要がありますfree
。
scanf メソッドは常に、書き込み先の変数への参照を使用します (したがって、ポインター以外の変数では & を使用して参照 (メモリ アドレス) を取得します)。ポインターを使用しているため、ポインター自体は既に変数への参照であり、変数のメモリアドレスを指しているため、& を使用する必要はありません。
入力文字列に十分なスペースを常に割り当てるようにしてください。(ANSI)C の方法は malloc() を使用することであり、より新しい (C++ 以降の C 標準) 方法は を使用して配列を作成することnew arrayname[size]
です。
char *filePath = "";
nul ターミネータのみを含む文字列リテラルへのポインタを宣言します。これは読み取り専用メモリに存在する可能性があるため、変更できません。代わりに、より大きな書き込み可能な文字列が必要です
char filePath[200];
if (scanf("%199s", filePath) != 1) {
/* user didn't enter a string */
}