我有以下代码:
char* id = someFunction();
if (id == "0x01") {
id = ....
}
所以,我基本上需要的是检查,如果在id
变量中我有字符串值“0x01”,如果是,那么传递{0x01, 0x00}
系统符号而不是它。
谢谢你的帮助。
我有以下代码:
char* id = someFunction();
if (id == "0x01") {
id = ....
}
所以,我基本上需要的是检查,如果在id
变量中我有字符串值“0x01”,如果是,那么传递{0x01, 0x00}
系统符号而不是它。
谢谢你的帮助。
使用strcmp()
.
此功能可用于string.h
Example:
printf( "Enter your name: " );
scanf( "%s", name );
if( strcmp( name, "Mary" ) == 0 )
printf( "Hello, Dr. Mary!\n" );
如果这是 C++,请使用std::string
. 否则,用于strcmp
比较。
C/C++ 不是一种语言。除非确实有必要,否则请停止使用这两个标签。
开始使用std::string
,您将不会遇到这样的事情:
std::string id = someFunction();
if (id == "0x01") {
id = "0x00";
}
你需要使用strcmp
. 或者它更安全的对应物strncmp
。
像这样的东西:
if (!strncmp(id, "0x01", 10)) {
// they're equal!
}
您不能将字符串与==
.
根据您的操作系统等,您可以使用std::string
Cstrcmp()
函数
DavidRF 评论说您可以将字符串与 进行比较==
,他是 100% 正确的。
printf("%s\n", ((char *)"hello" == (char *)"hello") ? "yes" : "no")
使用==
是比较指针。如果指针相等,则您知道字符串相等。您可以使用它来短路整个字符串比较(尽管它试图比编译器更聪明 - 一个好的strcmp
已经有这个检查了)。如果指针不相等,那么您对它们指向的字符串一无所知(它们仍然可能相等)。
上面的具体printf
示例真的很糟糕:我最近没有阅读 C 标准,但如果内存服务正确,将文字放入表中是编译器特定的行为。更糟糕的是,我敢打赌这取决于编译器选项(优化级别等)。该行可能在调试模式下工作,然后在发布模式下给出不同的结果 - 这永远不会好。
您需要使用该strcmp()
函数来比较字符串:
if (strcmp(id,"0x01") ==0) {
// match found.
如果这是 C 你想要strcmp函数:
if (!strcmp(id, "0x01")) {
// Do the id == "0x01" code
}
else {
// Do the id != "0x01" code
}
strcmp()
返回一个整数值,指示字符串之间的关系: