typedef struct headStr
{
char magic[6]; //suorui
char cmdCount;//3
int infoLen;
//unsigned long crcValue;
uint crcValue;
{
char magic[6]; //suorui
char cmdCount;//3
int infoLen;
//unsigned long crcValue;
uint crcValue;
}*pHeadInfo,headInfo;//(6+1+1(补齐))+4+4
memcpy(dataHeadInfo,"suorui",6);
qDebug()<<dataHeadInfo.magic; 返回suorui
qDebug()<<strlen(dataHeadInfo.magic); //返回7 //为了说明,对于专用与字符串的函数都是用\0作为字符串结束的标志,所以我用strlen求长度的时候,magic中没有\0,所以它还继续往后搜索,到cmdCount还不是\0,cmdCount之后有一个补齐子符(\0),所以算下来是6+1
qDebug()<<strlen((char *)&dataHeadInfo);//返回7 //同上
qDebug()<<sizeof((char *)&dataHeadInfo);//返回4 //取的是字符指针长度
qDebug()<<sizeof(dataHeadInfo);//返回16 //结构体实际长度
所以在用strcmp(pHeadData->magic,"suorui"),就会出现>的结果,原因是它取的是magic的头地址,见到\0才算你这个字符结束,所以等到cmdCount=3之后才算结束,所以会比后边大。
为了正确性,一般用strncmp(first,senond,num);