Сравнивая "" и "" в C - PullRequest
       16

Сравнивая "" и "" в C

2 голосов
/ 23 октября 2011

Итак, у меня есть следующий тестовый код:

#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.

Ответы [ 2 ]

8 голосов
/ 23 октября 2011

Строка равна другой строке, если все символы перед NULL-терминатором обеих строк абсолютно одинаковы. Поскольку "" не имеет символов, оно соответствует этому определению по сравнению с "".

3 голосов
/ 23 октября 2011

Нет, это не будет меняться в разных реализациях, так как код C скомпилирован для машинного кода, а strcmp() будет делать то же самое на всех платформах.Вы получите одинаковый результат везде.Я также согласен с ответом Сета Карнеги.

...