Getline函数与代码混淆

时间:2014-01-02 16:33:32

标签: c++ unicode getline

使用XCode 5.0.2并使用Alex Allain作为参考,挑选C ++并在OS X 10.9上进行操作。

以下代码编译得很好并正确输出

#include <iostream>
#include <string>

using namespace std;

int main()

{
std::string user_first_name = "test";

std::cout << user_first_name << "\n";

return 0;
}

当我添加一个getline函数时,代码似乎是编译但没有输出。

#include <iostream>
#include <string>

using namespace std;

int main()

{
std::string user_first_name = "test";

std::getline( std::cin, user_first_name, '\n' );

std::cout << user_first_name << "\n";

return 0;
}

实际上,调试导航器的内存已经填满了条形图(尽管实际内存使用量固定为276 KB)。为什么我会被这么简单的事情/概念所困扰?

我做了一些挖掘,很可能这与文本编码问题有关。我使用的是Unicode(UTF-8)默认值。编码不是我熟悉的,也不是我在Windows上学习时必须处理的东西。我如何通过这个?

1 个答案:

答案 0 :(得分:0)

我不能评论XCode或OS X的使用,但我的理解是std :: cin总是给你一个窄的(单字节)字符流。在Windows中(至少使用Visual Studio),我认为无论您是编译UTF8(所有ASCII字符都是单字节)还是UTF16(所有ASCII字符都是2字节),它都能正常工作。运行时库可能会根据需要为您进行转换。

我不确定“填满酒吧”意味着什么,但也许只是因为你正在寻找未初始化的记忆。如果你认为这是一个编码问题,也许尝试使用wstring / wcin而不是string / cin,看看是否有帮助。