1
while(1){
    //Command prompt
    char *command;
    printf("%s>",current_working_directory);
    scanf("%s",command);<--seg faults after input has been received.
    printf("\ncommand:%s\n",command);
}

いくつかの異なるエラーが発生していますが、実際には再現できないようです (この時点での segfault を除いて)。このコードは、約 10 分前には問題なく動作していましたが、printf コマンドを無限ループさせ、現在は上記の行でエラーを検出しています。私が変更scanf(">%s",command);したのは、現在のものだけです。コマンド変数を配列に変更すると機能します。明らかにこれは、ストレージがそのために確保されているためです。

  1. 私は誰かにポインタをmallocする必要があると言ったことで起訴されました*(しかし、それは通常、配列にするなどの問題を解決するようです)
  2. 私が入力しているコマンドは "magic" (5 文字) であるため、異常なスタック オーバーフローは発生しません。
  3. Mac OS X 10.6 で最新バージョンの xCode (非 OS4) と標準の gcc を実行しています。
  4. これは私がプログラムをコンパイルする方法です:gcc --std=c99 -W sfs.c

何が起こっているのかを理解しようとしているだけです。これは私が二度と見る必要のない学校のプロジェクトのためのものなので、上司を泣かせる初心者向けの作業をコード化するだけです:)それに対するいくつかの修正、およびそれに対する何らかの修正がある場合、その修正が機能する理由。

4

2 に答える 2

11

scanfは、読み取ったデータを引数に格納しようとします(commandあなたの場合)。その変数は、有効なメモリを指すように初期化されていません。したがって、メモリを割り当てるmallocは、それを有効にします。スタックで宣言することもできます。

char command[somearraysize];
于 2010-04-12T22:19:25.653 に答える
11
 char command[100];
 scanf("%s",command);

これが必要な理由については、Cプログラミング言語などのCに関する本を読むことをお勧めします。

于 2010-04-12T22:19:37.167 に答える