【问题标题】:' ' seems to be treated as '\0'?' ' 似乎被视为 '\0'?
【发布时间】:2013-01-21 10:37:41
【问题描述】:

代码

我创建了以下程序:

#include <iostream>

void f(char v[])
{
    for(char* p = v; *p != 0; p++)
    {
        std::cout << *p << std::endl;
    }
}

int main()
{
    std::cout << int(' ') << std::endl;
    char c[256];
    std::cin >> c;
    f(c);
    return 0;
}

编译器

我使用 GNU GCC 编译器在 Code::Blocks 中使用 -std=c++0x 标志(没有警告)进行编译。

问题

我遇到的问题是,如果我输入一个包含一个或多个空格(即“一和二”)的字符串,则只打印第一个空格之前的字母(即'o'、'n'、'e ')。

我尝试过的

唯一想到的就是快速进行现实检查。我添加了一行:

std::cout << "Val: " << int(' ') << std::endl;

而且,正如预期的那样,打印的值不是 0(因为很明显,它不是空的'\0'字符)...

我不确定我错过了什么。是不是这样一行:

std::cin >> c;

使用 ' ' 作为某种终止字符?

谢谢。

【问题讨论】:

  • 看看这个 - 第一个答案是与你相关的stackoverflow.com/questions/805403/…
  • char c[256]; 是一个巨大的安全问题;使用std::string
  • @AlexChamberlain 为什么这是一个巨大的安全问题?我想我记得读过一些关于它的东西,但我一生都记不起它是什么。
  • 谷歌“缓冲区溢出”。

标签: c++


【解决方案1】:
std::cin >> c;

只会读取一个由空格分隔的单词。这是所有&gt;&gt; 运算符的功能。

如果要读取整行,请改用getline 函数。

【讨论】:

  • 我认为可能是这种情况。谢谢!
【解决方案2】:

流操作符&gt;&gt;格式化输入,它使用空格作为字段分隔符。如果要在输入中保留空格,请使用std::getline() 或流成员函数read()

【讨论】:

  • 谢谢你,恐怕因为 Bo Persson 比你早 30 秒回答,我可能会选择他的答案。不过还是谢谢你!
  • @BertieWheen 我很好 :-)
【解决方案3】:

尝试getline输入您的句子,cin&gt;&gt;使用空格作为输入之间的分隔符。

【讨论】:

    猜你喜欢
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2020-12-03
    • 1970-01-01
    相关资源
    最近更新 更多