这部分代码:
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更改字符串的时候,我有一个关于不兼容类型赋值的编译器错误。不明白为什么..
答案 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
不是