【发布时间】: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++