使用C-Strings时出错

时间:2013-03-13 08:32:27

标签: c++ c-strings

我有一个来自C ++教科书的简单示例,它定义了一个C-String,然后循环以用X替换所有不是\ 0字符的元素。

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进行比较。我认为我不想将指针与整数进行比较......

5 个答案:

答案 0 :(得分:3)

您需要在两个地方使用单引号。

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

由于您有双引号,因此它被视为字符串文字。

答案 1 :(得分:2)

"\0"更改为'\0'。第一个是衰减到指针的字符串文字,正如编译器告诉你的那样,你不允许将指针与整数进行比较。后者是一个普通的旧字符文字。

ourString[index] = "X";也是如此,将"X"更改为'X'

最后一行应为cout << ourString << endl;;

答案 2 :(得分:1)

你用字符串混淆了字符。您需要将"\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;

答案 3 :(得分:1)

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

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

将双刻度替换为单刻度。

答案 4 :(得分:1)

你使用了一个空操作符,它不用于双引号“”它总是用单引号'\ 0'

试试这个,

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