当我尝试使用此代码测试我的代码时,我得到警告初始化使指针形式的整数不带强制转换

#include <stdio.h>
#include <string.h>
#include "List.h"
#include "List.c"
int main()
{
    int k;
    // make list
    ListP r = newlist();
    //check if empty
    k = isEmptyList(r);
    if(k=0)
    {
        printf("this list is empty");
    }
    else
    {
        printf("List not empty");
    }
    //display
    displayList(r);
    //insert
    insertItemList(r, "shuan");
    //check if empty
    k = isEmptyList(r);
    if(k=0)
    {
        printf("this list is empty");
    }
    else
    {
        printf("List not empty");
    }
    //display
    displayList(r);
    return 0;
}


该错误表明它与newList()一致,新列表的函数是

typedef struct List
{
    struct Node* head;
    int size;
}List;

typedef struct Node
{
    char *info;
    struct Node* next;
}Node;
typedef struct Node *NodeP;
typedef struct List *ListP;

//makes a list
ListP newList()
{
    List *p;
    ListP g;
    p = (List*) malloc(sizeof(List));
    if(p == NULL)
    {
        fprintf(stderr, "Memory allocation failed!\n");
        exit(1);
    };
    p->size = 0;
    p->head == NULL;
    g = p;
    return g;
};


这是否意味着函数正在退出1,因为malloc没有为列表分配内存并且语法不正确,或者代码是否存在其他问题?任何见识将不胜感激。

最佳答案

可能您还会收到有关“未知”功能的警告。这意味着函数newList存在问题,并且编译器假定未知函数返回int,然后继续。

可能的原因:该函数名为newList,但是您使用了

ListP r = newlist();
             ^


您应该仔细检查是否包含正确的标题和名称正确,并且在使用该函数之前已声明该函数。搜索区分大小写(默认情况下,grep区分大小写,因此类似

grep -r "newlist" .  // verify
grep -r "newList" .  // again...


将起作用)在您的项目根目录中的“ newlist”和“ newList”。你也不要

#include "List.c"


但只有

#include "List.h"


然后还要更正p->head == NULL;与赋值p->head = NULL;的比较

关于c - 警告初始化使指针形式为整数而不进行强制转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26206647/

10-10 23:36