Ошибка работы с C-Strings

У меня есть простой пример из учебника C ++, который определяет C-String, а затем циклы, чтобы заменить все элементы, которые не являются символом \ 0, на X.

char ourString[5] = "Hi";
int index = 0;
while(ourString[index] != "\0")
{
ourString[index] = "X";
index++;
}

cout << ourString[] << endl;

Однако, когда я компилирую и запускаю, я получаю следующую ошибку:

C:\Users\Ben\Dropbox\Learning Programming\C++\Strings\Strings.cpp||In function 'int main()':|
C:\Users\Ben\Dropbox\Learning Programming\C++\Strings\Strings.cpp|17|error: ISO C++ forbids comparison between pointer and integer [-fpermissive]|
C:\Users\Ben\Dropbox\Learning Programming\C++\Strings\Strings.cpp|19|error: invalid conversion from 'const char*' to 'char' [-fpermissive]|
C:\Users\Ben\Dropbox\Learning Programming\C++\Strings\Strings.cpp|23|error: expected primary-expression before ']' token|
||=== Build finished: 3 errors, 0 warnings (0 minutes, 0 seconds) ===|

Я не вижу проблемы, почему он не позволяет мне (насколько я понимаю ошибку) сравнивать элементы, которые являются символами, с символом \ 0. Я не думаю, что я пытаюсь сравнить указатель на целое число …

0

Решение

+ Изменить "\0" в '\0', Первый — строковый литерал, который распадается на указатель, и, как сказал вам компилятор, вы не можете сравнивать указатели с целыми числами. Последний является простым старым буквальным символом.

То же самое касается ourString[index] = "X";, менять "X" в 'X',

И последняя строка должна быть cout << ourString << endl;;

2

Другие решения

Вам нужно использовать одинарные кавычки в двух местах.

while(ourString[index] != '\0')
{
ourString[index] = 'X';
index++;
}

Поскольку у вас двойные кавычки, он считается строковым литералом.

3

Вы путаете персонажей со строками. Вам нужно переключить "\0" в '\0' а также "X" в 'X', Также не стоит использовать [] на cout утверждение — объединение этих дает:

char ourString[5] = "Hi";
int index = 0;
while(ourString[index] != '\0')
{
ourString[index] = 'X';
index++;
}

cout << ourString << endl;

Обратите внимание, что вы можете написать это в более аккуратной форме:

for( char* c = ourString; *c ; ++c) // *c is the same as *c!='\0'
{
*c='X';
}
cout << ourString << endl;
1

replace while(ourString[index] != "\0")

с

while(ourString[index] != '\0')

Замените двойные галочки на одиночные.

1

Вы использовали нулевой оператор, он не используется с двойными кавычками «», он всегда использовался с одинарными кавычками ‘\ 0’

попробуй это,,

  while(ourString[index] != '\0')
1