0

なぜエラー

#include <stdio.h>

int main(void)
{
    int *p, size, i;
    FILE *fp;

    fp = fopen("input.txt","r");
    fscanf(fp, "%d", &size);

    p = (int*)malloc(size*sizeof(int));  //error
    for (i = 0; i <size; i++)
        fscanf(fp, "%d", &p[i]);

    for (i = size-1; i>= 0; i--)
        printf("%d\n", p[i]);

    free(p);
    fclose(fp);
    return 0;
}

私はubuntuで「Geany」を使用しています

およびGeanyコンパイラ:

fileName.c:11:2:関数'malloc'の暗黙的な宣言を警告します[-Wimplicit-function-declatation]fileName.c:11:12:警告:組み込み関数'malloc'の互換性のない暗黙の宣言[デフォルトで有効] fileName.c:18:12:警告:関数'free'の暗黙的な宣言[-Wimplicit-function-declaration]fileName.c:18:12:警告:組み込み関数'free'の互換性のない暗黙の宣言[enabled-byデフォルト]コンパイルは正常に終了しました

4

2 に答える 2

6

次のヘッダーがありません。

#include <stdlib.h>

とのプロトタイプはmalloc、見逃したヘッダーファイルでfree定義されています。stdlib.h

一部の標準C関数にインクルードするヘッダーファイルがわからない場合は、いつでもmanそれを理解するために使用できます。

この場合man malloc、インクルードする必要のあるヘッダーファイルが表示されます。

ところで、あなたのコードでは、fpNULL後かどうかをチェックしていませんfopen

fopenファイルが存在しない場合、またはファイルを開く権限がない場合(この場合は読み取り用)、失敗する可能性があります。

fp = fopen("input.txt","r");
if (fp == NULL)
{
    printf("Error opening input.txt\n");
    return -1;
}
于 2013-03-26T21:53:33.423 に答える
0

これ:

warning implicit declaration of function 'xxxxxx' [-Wimplicit-function-declatation] 

常に同じことを意味します。コンパイラはあなたが話している関数を見つけることができません。ほとんどの場合、正しいヘッダーファイルを忘れたことが原因です。

man <function name>この場合、man mallocターミナル(またはグーグル)に「」と入力すると、必要なヘッダーファイルを示すページが表示されます。この場合<stdlib.h>、それを含めると警告が消えます。

于 2013-03-26T21:56:56.163 に答える