-5

我的这部分代码:

    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 更改字符串时,我遇到了关于不兼容类型分配的编译器错误。不明白为什么..

4

5 回答 5

2

大概MAC_ADRESSES不是指针数组。 NULL 一个指针(通常(void *)0在 C 中),所以你不能将它分配给一个非指针变量。

编辑:由于您的定义是char MAC_ADRESSES[MAX_LINES][100],因此您有一个二维数组,而不是指针数组。你不能存储NULL在这个数组中。但是,您可以通过在第一个字节中放置一个空字符来清除字符串:

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

请注意,您也不能使用 来测试字符串是否相等==。你应该使用strcmp.

于 2013-09-11T17:57:31.127 回答
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';

于 2013-09-11T17:59:53.293 回答
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]是一个数组 - 不是指针!因此==运营商将没有任何意义

于 2013-09-11T18:03:32.180 回答
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 字符串 & == 不允许在数组基础上)

于 2013-09-11T18:05:47.547 回答
0

if MAC_ADRESSESis not a pointer array then MAC_ADRESSES[j] = NULL;is wrong 因为NULLis a pointer 而MAC_ADRESSES不是

于 2013-09-11T18:00:03.227 回答