【问题标题】:Incompatible types in assignment. C [closed]分配中的不兼容类型。 C [关闭]
【发布时间】:2013-09-15 21:14:06
【问题描述】:

我的这部分代码:

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

【问题讨论】:

  • MAC_ADRESSES的定义是什么?
  • 英语不是上下文无关的语言。 “错误”是“错误”的同义词,但“编译器错误”与“编译器错误”不同。
  • 对不起,我编辑了它。是的,我遇到了编译器错误。 字符 MAC_ADRESSES[MAX_LINES][100]
  • 你为什么不使用MAC_ADRESSES[j] = '0'
  • 既然错误信息是关于不兼容的类型,为什么你认为告诉我们 MAC_ADRESSES (sic) 的类型与找出问题的原因无关?

标签: c loops types incompatibletypeerror


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    '\0'代替NULL

    NULL 是宏定义为

    #define NULL (void *)0

    #define NULL 0,因此

    warning: assignment makes integer from pointer without a cast

    根据您的编辑问题使用:

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

    【讨论】:

    • 因为正如 Carl Norum 指出的那样,您正试图为数组赋值。
    • @same error ?如果您有char MAC_ADRESSES[MAX_LINES][100] 显然MAC_ADRESSES[j] = NULL; 无效,请使用MAC_ADRESSES[j][0] = '\0';
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我认为你需要这个

      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]
      

      我猜你正在尝试删除重复项

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

      【讨论】:

        【解决方案5】:

        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-01-23
          • 2012-06-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多