【问题标题】:C- Comparison operator instead of strcmp [closed]C-比较运算符而不是strcmp [关闭]
【发布时间】:2017-07-08 16:32:31
【问题描述】:

如果我使用比较运算符来比较字符串而不是 C 中的 strcmp,会发生什么?它会比较它的ASCII值并返回结果吗?

【问题讨论】:

  • 好的,字符串的 ASCII 值是多少?
  • "它会比较它的 ASCII 值并返回结果吗?"假设您的意思是“值”,不,这就是 strcmp 所做的(如果您使用的是 ascii 字符集)。
  • 你自己发现了什么?你的 C 书怎么说?

标签: c string strcmp


【解决方案1】:

它会比较两个指针的地址。

所以:

char* a = "hello";
char* b = "test";
char* c = "hello";
char* d = a;

a == d; // true
a == b; // false
a == c; // true or false, depending on the compiler's behavior.

如果编译器决定回收“hello”的实际字符串数据,第三个示例将成立,但它没有义务这样做。

【讨论】:

  • 虽然您的结论是正确的,但这些示例选择不当。 char * 与字符串文字不同。
  • @Olaf,问题是关于以空字符结尾的字符串,而不是字符串文字。我只是碰巧使用了字符串文字,因为 1)它使示例更短,2)它暴露了字符串池的复杂性。
  • 字符串仍然不是指针,而是数组。并且字符串文字将在翻译阶段 6 中转换为多字节字符序列,并在阶段 7 中附加一个终止符。它们在字符串语义方面是相同的(除了可变性,这里不相关)。
  • strcmp,这就是这个问题的意义所在,它作用于空终止的字符串指针,而不是数组。字符串数组可以隐式转换为 char 指针这一事实并不重要。
  • C 中没有“字符串指针”。函数采用char *。绝对不是“字符串数组”(应该是 char [][]。如果您想回答有关辅导的问题,至少要准确。
猜你喜欢
  • 2018-02-03
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多