-4

我有以下代码:

char* id = someFunction();
if (id == "0x01") {
    id = ....
}

所以,我基本上需要的是检查,如果在id变量中我有字符串值“0x01”,如果是,那么传递{0x01, 0x00}系统符号而不是它。

谢谢你的帮助。

4

7 回答 7

4

使用strcmp().

此功能可用于string.h

Example:

printf( "Enter your name: " );
scanf( "%s", name );
if( strcmp( name, "Mary" ) == 0 )
  printf( "Hello, Dr. Mary!\n" );
于 2012-10-12T11:28:14.653 回答
4

如果这是 C++,请使用std::string. 否则,用于strcmp比较。

C/C++ 不是一种语言。除非确实有必要,否则请停止使用这两个标签。

于 2012-10-12T11:28:41.143 回答
3

开始使用std::string,您将不会遇到这样的事情:

std::string id = someFunction();
if (id == "0x01") {
    id = "0x00";
}
于 2012-10-12T11:28:45.230 回答
1

你需要使用strcmp. 或者它更安全的对应物strncmp

像这样的东西:

if (!strncmp(id, "0x01", 10)) {
    // they're equal!
}
于 2012-10-12T11:28:31.737 回答
1

不能将字符串与==.

根据您的操作系统等,您可以使用std::stringCstrcmp()函数

DavidRF 评论说您可以将字符串与 进行比较==,他是 100% 正确的。

printf("%s\n", ((char *)"hello" == (char *)"hello") ? "yes" : "no")

使用==是比较指针。如果指针相等,则您知道字符串相等。您可以使用它来短路整个字符串比较(尽管它试图比编译器更聪明 - 一个好的strcmp已经有这个检查了)。如果指针不相等,那么您对它们指向的字符串一无所知(它们仍然可能相等)。

上面的具体printf示例真的很糟糕:我最近没有阅读 C 标准,但如果内存服务正确,将文字放入表中是编译器特定的行为。更糟糕的是,我敢打赌这取决于编译器选项(优化级别等)。该行可能在调试模式下工作,然后在发布模式下给出不同的结果 - 这永远不会好。

于 2012-10-12T11:28:40.803 回答
0

您需要使用该strcmp()函数来比较字符串:

if (strcmp(id,"0x01") ==0) {
   // match found.
于 2012-10-12T11:28:47.170 回答
0

如果这是 C 你想要strcmp函数:

if (!strcmp(id, "0x01")) {
    // Do the id == "0x01" code
}
else {
    // Do the id != "0x01" code
}

strcmp()返回一个整数值,指示字符串之间的关系:

  1. 零值表示两个字符串相等。
  2. 大于零的值表示第一个不匹配的字符在 str1 (id) 中的值大于在 str2 ("0x01") 中的值
  3. 小于零的值表示相反。
于 2012-10-12T11:29:26.230 回答