如何将系统符号传递给char *

时间:2012-10-12 11:26:53

标签: c

我有以下代码:

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

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

感谢您的帮助。

7 个答案:

答案 0 :(得分:4)

使用strcmp()

此功能在string.h

中可用
Example:

printf( "Enter your name: " );
scanf( "%s", name );
if( strcmp( name, "Mary" ) == 0 )
  printf( "Hello, Dr. Mary!\n" );

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

开始使用std::string,你就可以解决这些问题了:

std::string id = someFunction();
if (id == "0x01") {
    id = "0x00";
}

答案 3 :(得分:1)

您需要使用strcmp。或者更安全的对应strncmp

这样的事情:

if (!strncmp(id, "0x01", 10)) {
    // they're equal!
}

答案 4 :(得分:1)

无法将字符串与==进行比较。

根据您的操作系统等,您可以使用std::string或C strcmp()功能

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

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

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

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

答案 5 :(得分:0)

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

if (strcmp(id,"0x01") ==0) {
   // match found.

答案 6 :(得分: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. 小于零的值表示相反。