проверка `aStr == null` в C

#c

#c

Вопрос:

Я не понимаю, почему следующий фрагмент кода выдаст мне ошибку компиляции:

 string a = NULL:
if (a == NULL)        <<<<<<<<<<<<<<<<<< something is wrong with this line????
{ /* do something */ }
  

Это дает :
error: no match for ‘operator!=’ in ‘a != 0l’

Комментарии:

1. Какую часть сообщения об ошибке вы не понимаете?

2. Должно ли быть двоеточие после первого NULL? Эта ошибка возникла из этого кода или из какого-то другого кода? Вы не используете !=, вы используете ==.

3. string a = NULL является UB для std::string .

4. Что aStr ? Что null ? Почему вы не показываете нам фактический код, выдающий вам эту ошибку?

5. Хорошо, вот в чем дело. Я не понимаю причину отрицательных голосов! Я задал вопрос, потому что я действительно не понимал, почему он получал ошибку компиляции. Что в этом плохого?

Ответ №1:

if (a == NULL) не может работать, так как вы сравниваете std::string с целым числом, что невозможно. если вы хотите создать пустую строку и проверить ее на пустоту, просто сделайте:

 string a;
if (a.empty())
{ /* do something */ }
  

Комментарии:

1. НЕ приведет ли это к некоторой ошибке из-за не инициализированной переменной ИЛИ выброса NPE? (Извините, я из Java-среды)

2. @One Two Three: Нет, string a; вызывает конструктор по умолчанию, string который инициализируется a как пустая строка.

Ответ №2:

string в C это не то же самое, что строка в C. Вам нужно будет сравнить строку со строкой как a == string ("") .

Комментарии:

1. в c std::string перегружен operator==, поэтому приведение не требуется.

2. std::string также реализует empty() , поэтому все == не требуется.

3. Любой, если вы использовали == (что нормально для удобства чтения для некоторых людей), вам нужно только a == ""

Ответ №3:

Просто взглянув на это, двоеточие в конце первой строки вместо точки с запятой определенно бросит туда ключ. Не уверен, что это так, но я бы начал с этого.

Ответ №4:

Просто инициализируйте пустую строку с двойными кавычками и проверьте, является ли строка пустой. Или для вас обязательно использовать NULL?

 string a = "";
if (a == "")
{   /* dosomething */ }