【问题标题】:strcmp returning 10 even the strings are the same [closed]strcmp 返回 10,即使字符串相同 [关闭]
【发布时间】:2021-03-18 21:22:12
【问题描述】:

由于某种原因,当我比较两个确切的字符串时,它返回一个非零的数字。我不知道为什么会这样。

此处显示:

printf("%s %s %d\n",target,temp->variableName,strcmp(temp->variableName, target));

结果:"B B 10"

有人能告诉我这是怎么回事吗?我能做些什么来解决这个问题?

【问题讨论】:

标签: c string strcmp


【解决方案1】:

strcmp 的返回值是第一个 delta 的 ASCII 值(这取决于实现,但大多数体面的实现都会以这种方式运行)。

10 的 ASCII 等于 newline。您很可能在其中一个字符串中有回车。

【讨论】:

  • 这是如何被否决的?
  • 也许你不应该这样写第一句话。可以这样做,但标准没有规定。
  • 嗯...虽然第一句话对于任何理智的实现都是正确的,但不能保证 strcmp 返回任何东西的任何 ascii 值。 任何正值、零或任何负值是必需的。当 strcmp 被编译器内联并返回 -1 而不是差异时,通常会感到困惑,例如。像 here 和许多其他 SO 问题。你不应该依赖它。
  • @Woodstock 我猜 DV 的另一个原因是您在 OP 用 mre 纠正问题之前就已经猜到了。卡米尔库克是正确的。你应该修正你的答案。提到许多实现都以这种方式解决它没有错,但不能保证。
  • 如果有新行输出将打印一个新行,但输出不显示新行,B 之一将在下一行打印
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 2015-10-18
  • 1970-01-01
相关资源
最近更新 更多