- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个在实际 Gcc/c++ 编译器中编译良好的 linux 应用程序。
我需要在一个非常老的编译器(gcc/c++ 2.96 版)中编译它。问题是 wstring 不存在。
我在所有系统 header 中查找 wstring。我在 g++-3\string 中找到了它,但它被注释掉了。
我试着做了一个简单的 Hello world 应用程序来测试它。
我输入了 typedef wstring,但是当我执行 wstring 对象的 c_str() 时,编译器说它无法将 const char * 转换为 const wchar_t *。为什么 c_str() 返回 char 而不是 wchar?我该如何解决?
代码如下:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <iostream.h>
#include <string>
typedef basic_string<wchar_t> wstring;
int main(int argc, char *argv[])
{
char pHW[100];
wstring kk = L"Hello World!";
wcstombs(pHW,kk.c_str(),100); //kk.c_str() returns char * instead wchar_t
cout << "Text:[" << pHW << "]" << endl;
return EXIT_SUCCESS;
}
最佳答案
如果需要std::wstring
如果旧的编译器/库没有实现 C++ 标准并且不提供它,您需要自己实现一个足够的版本。根据您的需要,实现一个版本可能不会太复杂,例如,根据 std::vector<wchar_t>
.大多数std::basic_string<...>
使用算法可以很容易地实现功能。
就是说,如果您希望让 iostream 为 wchar_t
工作几乎所有的希望都破灭了!如果我真的必须做那样的事情,我可能会发现 my standard library实现并尝试让它在这个 gcc 上编译。它不会包含 std::basic_string<...>
的实现如果我没记错的话,它会包含 wchar_t
的流.
个人认为wchar_t
以及与之相关的任何内容(以及 char16_t
和 char32_t
)都是错误的方向:在 std::string
中使用 UTF-8并为此定义必要的操作。 wchar_t
没有解决任何问题,但确实创造了没有它就不存在的新问题(而且,是的,我知道微软被 Unicode 欺骗了,它 promise 在任何地方使用它——让以 Windows 为目标的程序员受苦)。
关于c++ - gcc/c++ v2.96 上不存在 wstring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27545777/
我想像下面的 c++ 代码一样使用 std::wstring 类型编写 ChaiScript 代码。 #include int testfunc(std::wstring s, std::wstri
以下是我尝试过的,但没有成功。 std::wstring = L"Text"; USES_CONVERSION; LPOLESTR lpDesc = W2OLE((LPWSTR)wsDescr.c_s
我有一个 map . 我插入了这样的对: m_Translations.Content().insert(pair(L"rome",L"roma")); m_Translations.Content(
我正在使用 std::string 作为文本缓冲区。然后,我确定该缓冲区中包含的数据是 UTF-16(即它实际上是一个 std::wstring)。 如何将 std::string 强制转换为 std
摘录如下: ... std::vector vecWstr; vecWstr.emplace_back(L"1"); wchar_t* data1 = vecWstr[0].data(); //在一个
我知道这应该很容易,但我就是没能消除编译错误。这是我的代码: template struct basic_field_type_map : public hash_map, basic_string>
我在 C++ 中有一个 wstring 变量和一个字符串变量。我想将它们连接起来,但简单地将它们相加会产生构建错误。我怎样才能将它们结合起来?如果我需要将 wstring 变量转换为字符串,我该如何完
我有一个简单的记录器类,我试图将其变成接受和输出 wstrings 而不是字符串。 标题: #include using namespace std; class CLog { public:
我的问题是,以前用于字符串的方法都不能用于 wstring。所以我问我如何才能轻松清除 wstring 以达到美学目的。 我现在的代码: while (!foundRightOne)
我已经尝试使用 wchar_t 和一个 for 循环来通过 wchar 读取内存 wchar 并且它有效。工作代码: int cl = 20; std::wstring wstr; wchar_t L
我正在尝试将一个整数附加到 wstring: TCHAR buffer[MAX_PATH]={0}; GetModuleFileName(NULL, buffer, sizeof(buffer)/si
我定义了这样一个枚举: enum eFeature { eF_NONE=0, eF_PORT_A=1, eF_PORT_B=2, eF_PORT_C=3, }; 我现在
我想简化代码以对 ANSI 和 UNICODE 字符串版本使用相同的函数 tstring formatW(const std::string format, ...); tstring formatA
如果我想要像下面这样的函数在 basic_string 上工作和 basic_string我应该怎么办?请注意,它必须更改 wchar_t在无序映射中。 函数还需要接受wchar_t数组以支持将参数作
我有一个 wstring 变量,我想按空格字符拆分它并放入一个 vector wstring wStr = L"Hello World !"; vector vw; wstring st = L"";
我想定义一个 union 体,用于读取特殊类型的二进制文件。 union 应该有两个成员,一个是 int,另一个是一种字符串,或者任何其他的问题;执行此操作的最佳方法是什么? union uu {
目前,我正在为一位中国客户开发一款应用。中国客户大多在其操作系统编码中切换到 GB2312 语言。我需要编写一个文本文件,它将使用 GB2312 进行编码。 我使用std::ofstream 文件 我
在我的程序中,我使用 wstring 打印出我需要的文本,但它给了我随 secret 码(由于不同的编码方案)。例如,我有这段代码。 wstring text; text.append(L"Some
我是 C++ 新手,遇到了这个问题。我有一个名为 DATA_DIR 的字符串,我需要将其格式化为 wstring。 string str = DATA_DIR; std::wstring temp(L
我有一个包含文本的 std::wstring 变量,我需要用分隔符将它拆分。我怎么能这样做?我不会使用会产生一些警告的 boost。谢谢 编辑 1这是一个示例文本: hi how are you? 这
我是一名优秀的程序员,十分优秀!