2017-09-10 1 views
-1
#include<stdio.h> 
#include<ctype.h> 
void main() 
{ 
    FILE *fp1,*fp2,*fp3; 
    char a[100],b; 
    int i=0,j=0; 
    fp1=fopen("names.txt","r"); 
    fp2=fopen("names.txt","w"); 
    i=0; 
    do 
    { 
     b=fgetc(fp1); 
     b=toupper(b); 
     a[i]=b; 
     i++; 
    } while(b!=EOF); 
    i=0; 
    do 
    { 
     fputc(a[i],fp2); 
     i++; 
    }while(a[i]!=EOF); 
    fclose(fp1); 
    fclose(fp2); 
    fclose(fp3); 
} 

がセグメンテーションフォールトを取得していますのために私にエラーを見つけることができますuがエラーが「ライン2のようなものですエラー をスポッティング私を助けplzzことができますが:セグメンテーションフォールト "コードの下にコンパイルするには、セグメンテーションフォールトを取得していますが、このコードをコンパイルしている間、私は

+1

まず、デバッガを使用してクラッシュを解決し、コード内のどこに位置するかを特定します。次に、関連するすべての変数の値を調べることもできます。 –

+3

ところで、['fgetc'](http://en.cppreference.com/w/c/io/fgetc)は' int'を返します。これは 'EOF'チェックのために非常に重要です。 –

+1

@Someprogrammerdudeが示唆しているように、エラーがSOに掲示する前にデバッガでステップ実行されていません。 –

答えて

1

デバッグの方法を学ぶ必要があります。デバッガの使い方を学んだり、忍耐を得ていない場合は、デバッグプリントをコードに入れて、どれだけ遠くにいるかを確認してください。例:

fprintf(stderr, "%d\n", i); 

これはあなたに何かを伝えます。あなたはかなり迅速にエラーを見つけるでしょう。

私の推測は、次のとおりです。

  1. あなたのファイルが100文字を超えています。
  2. bはintでなければならず、配列に格納しないでください。
  3. 2番目のループはファイルの終わりを探すべきではありませんが、読み込んだ文字数のカウントを使用する必要があります。
  4. あなたはfp3を閉じていますが、まだ開いていません。

また、これは基本的なものです。基本的なデバッグを行うことを学ぶ必要があります。

関連する問題