0

私は以下の簡単なコードを持っていますが、unix で GCC をコンパイルして実行すると、セグメンテーション エラーが発生しました。ファイルの命名またはあるファイルを他のファイルにコピーしているためですか。どんな助けでも感謝..

#include <iostream>
#include <stdio.h>

using namespace std;

void copy(char *infile, char *outfile) {
    FILE *ifp; /* file pointer for the input file */
    FILE *ofp; /* file pointer for the output file */
    int c; /* character read */
    /* open i n f i l e for reading */
    ifp = fopen (infile , "r" );
    /* open out f i l e for writing */
    ofp = fopen(outfile, "w");
    /* copy */
    while ( (c = fgetc(ifp)) != EOF) /* read a character */
        fputc (c, ofp); /* write a character */
    /* close the files */
    fclose(ifp);
    fclose(ofp);
}

main() 
{
copy("A.txt","B.txt");
}
4

3 に答える 3

1

IF A.txt が存在しない場合、ifp の値は NULL (0) になります。次に、この関数呼び出しはセグメンテーション違反になります。

fgetc(ifp)

そのため、コードを変更して、開いたファイル (各ファイル) で NULL をチェックします。次に例を示します。

ifp = fopen (infile , "r" );
if (ifp == NULL) {
    printf("Could not open %s\n", infile);
    exit(-2);
}

ファイルの先頭にもこのインクルードを追加する必要がある場合があります。

#include <stdlib.h>
于 2013-09-14T16:46:08.430 に答える
1

あなたが投稿したコードは正しいです

 ifp = fopen (infile , "r" );  //will return NULL if file not there 

 while ( (c = fgetc(ifp)) != EOF)     

を使用しているときに、現在のディレクトリに A.txt ファイルがない場合、セグメンテーション エラーが発生する可能性があります。

于 2013-09-14T16:35:28.103 に答える
0

copy(const char* infile, const char* outfile)不必要な警告を避けるために、引数で使用します。

また、コードを実行している現在のディレクトリにファイルがない場合もあります。したがって、ファイルへの完全なパスを指定してください。

于 2013-09-14T16:44:14.690 に答える