偷看功能错误

时间:2014-03-22 19:30:34

标签: c string

大家好我试图写一个偷看功能,但我对如何解决我得到的警告感到困惑。我的目标是在大小为零时返回NULL字符,否则返回最后一个字符。

struct mystring
{
  char size;
  char capacity;
  char* data;
};
typedef struct mystring Mystring;


     char* mystring_peek(MYSTRING hString)
     {
       Mystring* string = (Mystring*) hString;
       if(string != NULL)
       {
         if(string->size != NULL)//line containing first warning
         {
           return &(string->data);//line containing second warning 
         }
     }
      return;
     }

使用gcc -Wall

的错误/警告
   warning: comparison between pointer and integer [enabled by default]
   warning: return from incompatible pointer type [enabled by default]​

5 个答案:

答案 0 :(得分:1)

找到修改过的函数

  char* mystring_peek(MYSTRING hString)
  {
      Mystring* string = (Mystring*) &hString;
      if(string != NULL)
      {
         if(string->size != 0)
         {
            return string->data;
         }
      }

     return NULL;
 }

答案 1 :(得分:0)

为什么这一行

 Mystring* string = (Mystring*) hString;

hString属于Mystring

,因此没有任何意义

事情就会崩溃。

答案 2 :(得分:0)

&(char-data)是char **而不是char *, 在函数的最后应该返回NULL 和大小应该与0比较而不是NULL。

答案 3 :(得分:0)

第一个警告是,正如编译器所说,因为你比较指针和整数。代码应为:

if(string->size != 0)

第二个错误是简单的类型不匹配。需要char**时返回char*。你可能意味着:

return string->data;

当然编译器反对:

return;

毕竟,您确实承诺返回char*

有人也对从MYSTRINGMystring*的演员表示不满。

答案 4 :(得分:0)

if (string->size != NULL) // line containing first warning

发出警告,因为size是一个整数,但NULL扩展为您的实现上的指针类型。使用0'\0'代替NULL