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-declaration] fileName.c:11:12:警告:内置函数“malloc”的隐式声明不兼容 [默认启用] fileName.c:18:12:警告:函数'free'的隐式声明 [-Wimplicit-function-declaration] fileName.c:18:12:警告:内置函数'free'的隐式声明不兼容 [启用-by default] 编译成功完成

4

2 回答 2

6

您缺少以下标头包括:

#include <stdlib.h>

malloc和的原型在您错过free的头文件中定义。stdlib.h

如果您不确定某些标准 C 函数要包含哪些头文件,您总是可以使用man它来弄清楚。

对于这种情况man malloc,将显示需要包含的头文件。

顺便说一句,在您的代码中,您没有检查fp是否NULLfopen.

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 回答