【发布时间】:2016-03-07 19:47:41
【问题描述】:
我正在尝试编写从 istream 读取字符并将其转换为 wchar_t 的小程序。我遇到了段错误。这是我的代码
#include <iostream>
using namespace std;
wchar_t read(istream &stream) {
char *c;
stream.read(c, sizeof(*c));
cout << *c << endl;
wchar_t retChar = static_cast<wchar_t>(*c);
return retChar;
}
int main() {
cout << "Write something" << endl;
read(cin);
}
我的逻辑是:
- 创建一个字符数组,因为只读需要字符数组。
- 读取等于字符大小的字节。即读取一个字符并将其存储在数组 c 中。
- 创建一个 wchar_t 并将该字符 *c 转换为 wchar_t。
- 返回 wchar_t
由于我遇到了段错误,这里显然有问题。虽然我看不到。任何帮助将不胜感激。
非常感谢
【问题讨论】:
-
你永远不会为你的
char*分配内存。比你没有真正转换任何东西 - 你只是在没有任何转换的情况下转换类型。 -
您的段错误与转换为
wchar_t无关。你得到是因为你的read函数的前两行。您正在读取一个未初始化(无效)的指针(更不用说 - 在同一行中取消引用所述指针。 -
你也可以声明你想要存储的东西,然后在对
read的调用中将其转换为char*。 -
您没有在任何地方创建字符数组。
-
另外,为什么不直接用
wifstream打开文件并将数据读入wstring?
标签: c++ casting char istream wchar-t