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 に答える