сравнивая символ в динамическом массиве с символом - PullRequest
0 голосов
/ 26 июня 2019

Я хочу напечатать массив динамических символов, который имеет \ 0 символов перед фактическим концом. Я печатаю его, используя cout для каждого индекса.

for (int i = 0; i < size; i++) {

        std::cout << content[i];
}

Но когда я иду по символу \ 0, я хочу его обнаружить, поэтому я использую:

if (content[i] == 0) {
     std::cout "zero";
}

Я пытался сделать

if (content[i] == "\0") {
     std::cout "zero";
}

Но я не могу сделать это сравнение, потому что вы, очевидно, не можете сравнить const char* и char.

Что я сделал не так? Как мне сделать это сравнение?

char массив между прочим:

char * content = new char[size];
file.seekg(0);
file.read(content, size);

Ответы [ 2 ]

4 голосов
/ 26 июня 2019

в

if (content[i] == "\0")

"\0" является строковым литералом, в данном случае const char [2]. Это затухает до указателя, в результате чего const char * сравнивается с char и ошибкой компилятора.

Вы хотите

if (content[i] == '\0')

чтобы получить ноль в качестве персонажа. Тем не менее, целые числа могут сравниваться с char, поэтому if (content[i] == 0) допустимо, но (мое мнение) менее ясно, чем явное создание нулевого символа.

Дальнейшее чтение: Одинарные кавычки или двойные кавычки в C или C ++ ( chris предоставили ссылку)

0 голосов
/ 26 июня 2019

Попробуйте "0" в вашем операторе if, с тех пор вы будете сравнивать те же типы

...