2

所以我有以下测试代码:

#include <string.h>
#include <stdio.h>

int main(int argc, char* argv[]){
  int retVal = strcmp("", "");
  printf("%d\n", retVal);
  return 0;
}

而对我来说,它似乎总是打印出 0,即“”和“”总是彼此相等。但我很好奇。这是 strcmp 保证的东西,还是有可能因实施而异?也许我只是偏执狂,但我已经研究了足够多的奇怪系统来了解不同实现的危险。

更新:我决定澄清以证明我的偏执。我在我的程序中真正做的是更类似于这个:

#include <string.h>
#include <stdio.h>

int doOperation(const char* toCompare){
  //do stuff in here
  int compResult = strcmp(toCompare, "");
  //do more stuff depending on compResult
}

int main(int argc, char* argv[]){
  const char* myString = "";
  doOperation(myString);
  return 0;
}

我想确保 doOperation 中的事情能够正确进行。请注意,这只是一个示例。在我的 doOperation 函数中,我实际上不会知道toCompare.

4

2 回答 2

8

如果两个字符串的 NULL 终止符之前的所有字符完全相同,则一个字符串等于另一个字符串。由于""没有字符,因此与 . 相比,它符合该定义""

于 2011-10-22T20:46:25.813 回答
3

不,它不会随着不同的实现而变化,因为 C 代码被编译为机器特定的代码,并且strcmp()在所有平台上都会做同样的事情。你会在任何地方得到相同的结果。我也同意塞思卡内基的回答。

于 2011-10-22T20:51:24.330 回答