大家好我试图写一个偷看功能,但我对如何解决我得到的警告感到困惑。我的目标是在大小为零时返回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]
答案 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*
。
有人也对从MYSTRING
到Mystring*
的演员表示不满。
答案 4 :(得分:0)
if (string->size != NULL) // line containing first warning
发出警告,因为size
是一个整数,但NULL
扩展为您的实现上的指针类型。使用0
或'\0'
代替NULL
。