关于if语句和带字符串strcmp的混淆

关于if语句和带字符串strcmp的混淆,c,string,if-statement,strcmp,C,String,If Statement,Strcmp,在这里,我需要一些帮助来理解字符串。我有一个buff,它被刷新,然后传递给UART函数。该缓冲区现在已更新,并保存了一些值。我需要检查缓冲区的第5个字节。让我困惑的是,我已经用下面的代码写了。 请看一看 int main() { char buff[8]; memset(buff,0,8); /* This buff is used by some UART function, and hence is updated by UART

在这里,我需要一些帮助来理解字符串。我有一个buff,它被刷新,然后传递给UART函数。该缓冲区现在已更新,并保存了一些值。我需要检查缓冲区的第5个字节。让我困惑的是,我已经用下面的代码写了。 请看一看

int main()  
{  
  char buff[8];
  memset(buff,0,8);  

  /*  
       This buff is used by some UART function, and hence is updated by UART  
       This buff now holds some data. And now, I need to check the 5th byte it is holding.  
  */   

  if(buff[4]==0x04)  //will this work? or I need to use if(strcmp(buff[4],0x04))  ???
  {  
    //Do some functionality, for an example    
    printf("True");  
  }  
  else  
    printf("False");  

  return 0;  
}  

你的代码是正确的,是的

只有当您知道
'\x04'
字符后跟
'\0'
字符串终止符时,才可以使用
strcmp()
。因为它看起来像二进制数据,所以使用
strcmp()
会很奇怪


您不会以任何方式比较“字符串”,因此使用
=
是可以的。在C语言中,“字符串”表示“一个(指向一个)以0结尾的字符数组”。这不是您要处理的内容,因此任何关于如何处理字符串的经验教训都不适用。

您的代码是正确的,是的

只有当您知道
'\x04'
字符后跟
'\0'
字符串终止符时,才可以使用
strcmp()
。因为它看起来像二进制数据,所以使用
strcmp()
会很奇怪



您不会以任何方式比较“字符串”,因此使用
=
是可以的。在C语言中,“字符串”表示“一个(指向一个)以0结尾的字符数组”。这不是您要处理的内容,因此任何关于如何处理字符串的经验教训都不适用。

您需要检查缓冲区的第5个字节,并将其与什么进行比较?字符0x04、字符“4”或其他字符?其十六进制值为4。i、 e.0x04。如答案中所述,您的代码没有任何字符,因此是正确的。但是请注意,注释掉的代码是非常错误的——strcmp(buff[4],0x04)将0x04视为指针,而不是数据,并且很可能会崩溃。如果您确定读取了5个字节,那么buff[4]是有效的,那么您的代码就可以了。当然也可以检查前4个字节,但那是另一回事。@svk:非常感谢,先生。现在知道了,你需要检查缓冲区的第5个字节,并将其与什么进行比较?字符0x04、字符“4”或其他字符?其十六进制值为4。i、 e.0x04。如答案中所述,您的代码没有任何字符,因此是正确的。但是请注意,注释掉的代码是非常错误的——strcmp(buff[4],0x04)将0x04视为指针,而不是数据,并且很可能会崩溃。如果您确定读取了5个字节,那么buff[4]是有效的,那么您的代码就可以了。当然也可以检查前4个字节,但那是另一回事。@svk:非常感谢,先生。现在知道了非常感谢先生。它只是一个二进制数据。我想我不应该使用==运算符来比较字符串的值!字符串是字符数组。char数组的名称就像指向字符串的指针(就像C中的其他类型的数组一样)。导致混淆的原因是字符数组和字符串不是一回事。字符串存储在字符数组中,但字符串需要NUL终止符,并且往往只包含可打印的字符代码。字符数组没有这样的限制。@SpacedMonkey:谢谢你的解释,非常感谢。它只是一个二进制数据。我想我不应该使用==运算符来比较字符串的值!字符串是字符数组。char数组的名称就像指向字符串的指针(就像C中的其他类型的数组一样)。导致混淆的原因是字符数组和字符串不是一回事。字符串存储在字符数组中,但字符串需要NUL终止符,并且往往只包含可打印的字符代码。字符数组没有这样的限制。@SpacedMonkey:谢谢你的解释,先生