0

キーボードから入力を取得するために scanf の引数として 渡す方法がわからないscanf変数を( を使用して) キーボードから読み取ろうとしています。どうすればいいですか?char *pathpath

PSこれは私が試したことです:

char *filePath = "";
printf("Path: "); scanf("%s", &filePath);

しかし、私のアプリケーションは常に停止します。

4

4 に答える 4

2
char *filePath = "";

コンパイラは、上記のステートメントについて警告する必要があります。filePath型はconst char*ありませんchar*

filePath空の文字列リテラルを指しています。文字列リテラルは読み取り専用の場所にあり、編集することはできません。

割り当ててメモリを使用してmallocから、入力を取得する必要があります。完了したら、それを行う必要がありますfree

于 2013-08-03T15:59:01.133 に答える
1

scanf メソッドは常に、書き込み先の変数への参照を使用します (したがって、ポインター以外の変数では & を使用して参照 (メモリ アドレス) を取得します)。ポインターを使用しているため、ポインター自体は既に変数への参照であり、変数のメモリアドレスを指しているため、& を使用する必要はありません。

入力文字列に十分なスペースを常に割り当てるようにしてください。(ANSI)C の方法は malloc() を使用することであり、より新しい (C++ 以降の C 標準) 方法は を使用して配列を作成することnew arrayname[size]です。

于 2013-08-03T16:28:08.173 に答える
1
char *filePath = "";

nul ターミネータのみを含む文字列リテラルへのポインタを宣言します。これは読み取り専用メモリに存在する可能性があるため、変更できません。代わりに、より大きな書き込み可能な文字列が必要です

char filePath[200];
if (scanf("%199s", filePath) != 1) {
    /* user didn't enter a string */
}
于 2013-08-03T15:58:02.597 に答える