-1

こんなに遅いタイミングで質問して申し訳ありませんが、私は翌日に課題を提出する予定で、これは私が持っている 7 つの質問のうちの最初の 1 つにすぎません。すでに数日間使用しています。セグメンテーション違反は通常、どこかに不正なメモリ アクセスがあることを意味することを知っていますが、なぜそれが発生するのかわかりません。fseek()私はすでにメモリを割り当てています..

#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"sys/types.h"
#include"sys/stat.h"
#include"fcntl.h"

int file_exists( char *filename)
//int main(int argc, char **argv[])
{

    FILE *file;

    if(file=fopen(filename,"r"))
//if(file=fopen(argv[1],"r"))
    {
        fclose(file);
        return 1;
    }

    return 0;
}

int main(int argc, char *argv[] )
{
    int fp,number,size,i;
    char *buffer;
    fp = open(argv[1], "w");

    number=atoi(argv[3]);
    printf("%d",number);

    if(file_exists(argv[1])==1)
    {
        fseek(fp,0L,SEEK_END);
        size=ftell(fp);
        fseek(fp,0L,SEEK_SET);

        if(size>number)
        {
            fseek(fp,number,SEEK_SET);
            fprintf(fp,argv[2]);
        }

        if(size<number)
        {
            int spaces;
            fseek(fp,0L,SEEK_END);
            spaces=number-size;
            buffer= malloc(spaces);
            memset(buffer," ",spaces);

//for(i=0;i<spaces;i++)
//{
            fprintf(fp,buffer);
//}
            free(buffer);

            buffer=malloc(number*sizeof(number));
            fprintf(fp,argv[2]);
            free(buffer);
        }


    }

    if(file_exists(argv[1])==0)
    {
        creat(argv[1],"w");
        buffer=malloc(number);
        memset(buffer,' ',number);
//for( i=0;i<number;i++)
//{
        fprintf(fp,buffer);
//}
        free(buffer);
        buffer=malloc(number);
        fprintf(fp,argv[2]);
        free(buffer);
    }

    return 0;
}
4

1 に答える 1

0

fprintf には、ファイル DESCRIPTOR ではなく、ファイル HANDLE が必要です。

本当に fprintf を使用したい場合は、fopen を使用して、ファイル記述子 (fp) からファイル ハンドルを取得します。

于 2013-03-21T13:39:44.007 に答える