【问题标题】:Confusions about if statement and strcmp with Strings关于 if 语句和 strcmp 与字符串的混淆
【发布时间】:2013-06-05 09:44:22
【问题描述】:

在这里,我需要一些帮助来理解字符串。我有一个 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;  
}  

【问题讨论】:

  • 你需要检查缓冲区的第5个字节并与什么进行比较?字符 0x04、字符 '4' 还是其他?
  • 其十六进制值 4。即 0x04。没有任何字符
  • 您的代码是正确的,如答案中所述。但是请注意,注释掉的代码非常错误—— strcmp(buff[4],0x04) 会将 0x04 视为指针,而不是数据,并且很可能会崩溃。
  • 你的代码很好,如果你确定你已经读取了 5 个字节,那么 buff[4] 是有效的。当然,也可以检查前 4 个字节,但那是另一回事了。
  • @svk:非常感谢先生。现在明白了

标签: c string if-statement strcmp


【解决方案1】:

你的代码是正确的,是的。

仅当您知道'\x04' 字符后跟'\0' 字符串终止符时,为此使用strcmp() 才有效。由于看起来像二进制数据,使用strcmp()会很奇怪。

不是比较“字符串”,所以使用== 很好。在 C 中,“字符串”表示“char 的一个(指向一个)以 0 结尾的数组”。这不是您要处理的问题,因此任何有关如何处理字符串的经验教训都不适用。

【讨论】:

  • 非常感谢先生。它只是一个二进制数据。
  • 我认为我不应该使用 == 运算符来比较字符串的值!字符串是字符数组。 char 数组的名称就像指向字符串的指针(就像 C 中的其他类型的数组一样)。这造成了混乱
  • 字符数组和字符串不是一回事。字符串存储在字符数组中,但字符串需要 NUL 终止符,并且往往只包含可打印的字符代码。字符数组没有这样的限制。
  • @SpacedMonkey:谢谢先生的解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 2021-12-04
  • 2017-08-20
  • 2014-07-14
  • 1970-01-01
相关资源
最近更新 更多