-3

課題の 1 つを実行するには、C プログラミング言語を使用して入力ファイルから読み取る必要があります。

これが私のコードです:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char *input = readFromFile(argv);
    return 0;
}

char *readFromFile(char *argv[])
{
    FILE *fp;
    fp = fopen(argv[1],"r");
    char *input, c;
    int i = 0;

    while(!feof(fp))
    {
        c = fgetc(fp);
        input[i++] = c;
    }
    fclose(fp);
    return input;
}

function ではなく、別の関数でこの読み取り操作を実行したいmain()。やってみましたが、できませんでした。

上記のコードで実行しようとすると、次のようなエラー メッセージが表示されます。

競合する型readFromFile()

このエラーを修正して、やりたいことを実行するにはどうすればよいですか?

4

2 に答える 2

0

readFromFile使用する前に宣言する必要があります。これを行う最善の方法は、プロトタイプを追加することです。

char *readFromFile(char *argv[]); /* note that the identifier is useless here */

NB : ところで、ソース コードには他にも多くのエラーがあります。主なものは、メモリを割り当てないことですinput。したがって、初期化されたポインターを逆参照しようとします。これにより、未定義の動作が発生します。ポインターを返すため、動的割り当てを使用する必要があります。

#include <stdlib.h>
char *input = malloc(SIZE);

また、あなたの使い方feofは間違っています。

于 2012-11-14T17:46:37.107 に答える
-2

まず、次のいずれかを選択できます。

1.関数プロトタイプを宣言します。
2. main の前に関数を宣言します。

このようにして、関数はメインで認識されます。高速にするために、メインの前に常に関数を宣言します。readFromFile では、必要なメモリを割り当てていないため、修正しました。

#include <stdio.h>
#include <stdlib.h>

char *readFromFile(char *argv[])
{
    FILE *fp;
    fp = fopen(argv[1],"r");
    char *input, c;
    int i = 0;
    size_t size=100*sizeof(char);
    input=(char*)malloc(size);

    while( (c = fgetc(fp)) != EOF )
    {
        if(++i == size)
        {
            size+= 100*sizeof(char);
            input=(char*)realloc(input,size);
        }
        input[i-1] = c;
    }
    fclose(fp);
    return input;
}

int main(int argc, char *argv[])
{
    char *input = readFromFile(argv);
    return 0;
}
于 2012-11-14T18:00:56.763 に答える