分配中的类型不兼容。 C

时间:2013-09-11 17:55:40

标签: c loops types incompatibletypeerror

这部分代码:

    char MAC_ADRESSES[MAX_LINES][100];
    for(j=i+1; j<=countlines; j++)
        {
            if((MAC_ADRESSES[j])==(MAC_ADRESSES[i]))
            {
                MAC_ADRESSES[j] = NULL;
            }

在我想用NULL更改字符串的时候,我有一个关于不兼容类型赋值的编译器错误。不明白为什么..

5 个答案:

答案 0 :(得分:2)

据推测,MAC_ADRESSES不是一个指针数组。 NULL 指针(通常是C中的(void *)0),因此您无法将其指定给非指针变量。

编辑:由于你的定义是char MAC_ADRESSES[MAX_LINES][100],你有一个2D数组,而不是一个指针数组。您无法在此阵列中存储NULL。但是,您可以通过在第一个字节中放置一个空字符来消除字符串:

            MAC_ADRESSES[j][0] = '\0';

请注意,您也无法使用==测试字符串是否相等。您应该使用strcmp

答案 1 :(得分:1)

而不是NULL使用'\0'

NULL是定义为

的宏

#define NULL (void *)0

#define NULL 0,因此

warning: assignment makes integer from pointer without a cast

根据已修改问题,请使用:

MAC_ADRESSES[j][0] = '\0';

答案 2 :(得分:1)

我认为你需要这个

for(j=i+1; j<=countlines; j++)
    {
        if(strcmp(MAC_ADRESSES[j],MAC_ADRESSES[i]) == 0)
        {
            MAC_ADRESSES[j][0] = 0;
        }
    }

鉴于此

char MAC_ADRESSES[MAX_LINES][100]

因为我猜您正在尝试删除重复项

BTW MAC_ADDRESS[j]是一个数组 - 不是指针!因此==运算符没有任何意义

答案 3 :(得分:1)

NULL定义如下

#define NULL (void*)0

所以你不能将void *类型赋给char [] []。(两者都是不兼容的类型)

如果要使用'\ 0'或0;

无效
MAC_ADRESSES[j][0] = '\0';

      (or)

MAC_ADRESSES[j][0] = 0;

(注意:你也应该使用 strcmp / stricmp / strcasecmp 来比较c字符串&amp; ==不允许在数组基础上使用)

答案 4 :(得分:0)

如果MAC_ADRESSES不是指针数组,那么MAC_ADRESSES[j] = NULL;是错误的,因为NULL是指针且MAC_ADRESSES不是