-1

誰かが助けてくれることを願っています。私はこのプログラムを完全に実行し、数行のコードをある関数から別の関数に移動しましたが、すべてがバラバラになりました。

関数の先頭から segfault までのスニペットを以下に含めました。「私たちはここに着きましたか?」と喜んで出力します。しかし、次のステートメントではありません。これを理解するのに非常に多くの時間を費やしたので、最初に作成しなければならなかった作業ビルドを思い出せません

それ(少なくとも以下のセクション)は、テキストファイル全体を文字列にコピーすることになっています

この話の教訓: 動作するコードは「正しい」コードよりも優れています。微調整を試みる前に、常に動作するコードをコピーしてください。

void validateFile(FILE* file, char** menuStore, char** submenuStore)
{

    char* temp = NULL;
    size_t size;
    boolean flag = true;
    char first;

    /*Loop Counter*/
    int i;

    fseek(file, 0, SEEK_END);
    size = ftell(file) * sizeof(char);
    fseek(file, 0, SEEK_SET);

    if ((temp = malloc(size)) == NULL)
    {
        printf("\nUnable to allocate Memory, Program exiting");
        exit(EXIT_FAILURE);
    } else
    {
        for (i = 0; i < (size / sizeof(char)); i++)
        {
            temp[i] = fgetc(file);
        }

        printf("\n did we get here?");
        printf("\nFile loaded, validating...");
4

1 に答える 1

-1

ファイルからの読み取り中は、このようなループを使用しないでください-

for (i = 0; i < (size / sizeof(char)); i++)
{
    temp[i] = fgetc(file);
}

EOFファイルからの読み取り中に状態を確認する必要があります-

i=0;
while((temp[i]=fgetc(file))!=EOF)
     i++;

文字列の末尾を にします\0。それがより良い方法です。

temp[i]='\0';
于 2014-08-13T12:02:59.830 に答える