我怎样才能转换char* argv[]为wstring?我用来"/d"获取字符串路径argv并将其作为函数的参数插入ArrayOfDirContents。
int main(int argc, char *argv[])
{
double minimum = 10;
double input;
char* filename;
wstring adr(L".");
const wchar_t* adresar;
adresar = adr.c_str();
char *p;
int num;
errno = 0;
long conv;
for (unsigned i = 1; i < argc; i++) {
conv = strtol(argv[i], &p, 10);
// Check for errors: e.g., the string does not represent an integer
// or the integer is larger than int
if (errno …Run Code Online (Sandbox Code Playgroud) std::map<char, wchar_t>我正在尝试使用C++ 中的数据类型创建一个变量。当我尝试此操作时,Visual Studio 给出以下构建错误:
\n\nC2440“初始化”:无法从“初始化列表”转换为“std::map<char,wchar_t,std::less<char>,std::allocator<std::pair<const char,wchar_t>>>”
\n
wchar_t当是键数据类型和char是值数据类型时也会发生同样的错误。
您可以通过运行以下代码来复制此错误:
\nconst std::map<char, wchar_t> UNICODE_MAP = {\n { 'X', L"\xe2\x96\x88" },\n { 'G', L"\xe2\x96\x93" },\n { 'O', L"\xe1\x97\xa3" },\n { 'P', L"\xe1\x97\xa4" }\n};\nRun Code Online (Sandbox Code Playgroud)\n如何制作一个以键为 a char、以值作为wchar_t数据类型的映射?
我正在创建一个C++ wstring类,用于mingw版本4.3.0,交叉编译Win32.我希望我的字符串工作就像std::string这意味着我想要一个erase(int pos)方法来擦除位置上的单个元素pos.
这是我的第一次尝试:
#include <wchar.h>
#include <iostream>
#include <vector>
class wstring : public std::vector<wchar_t>{
public:
void erase(size_t where){
erase(begin()+where);
}
};
int main(int argc,char **argv) {
wstring c1;
c1.push_back(L'a');
c1.push_back(L'b');
c1.push_back(L'c');
c1.erase(1);
for(size_t i = 0;i<c1.size();i++){
std::cout << "c1[" << i << "] = " << c1[i] << "\n";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这看起来应该对我有用,但是当我尝试编译它时,我得到了这个wacko编译错误:
$ i386-mingw32-g++ x1.cpp
x1.cpp: In member function 'void wstring::erase(size_t)':
x1.cpp:8: error: no matching function for call to 'wstring::erase(__gnu_cxx::__normal_iterator<wchar_t*, …Run Code Online (Sandbox Code Playgroud) 实际问题 - 我正在研究一个在2个独立硬件平台上运行的应用程序.
编译方法及其配置由我定义和控制.
我的应用程序收到UTF-8/ISO-8859文本,并应对字符串执行一些基本操作(复制,搜索等).
事实上,一个编译器是GCC(sizeof(wchar_t)== 4),另一个是Mingw(sizeof(wchar_t)== 2).
为了支持所有UTF-8的可能性,我想在我的代码中wchar_t中的"typedef"是uint32_t类型,因此这将强制Mingw编译器在同一行,并覆盖所有UTF-8选项.
我正计划使用标准库提供的宽字符操作函数(mbstowcs,wcscmp,wcscpy,ex ..)
问题是,"强迫"编译器使用更多空间,可能会对库函数产生一些不良影响(除了性能)(mbtowcs甚至会在更改后在这里工作吗?)
我尝试使用ICU,但它是一个非常大的库,因此打破了这笔交易.我需要它小而可靠.
谢谢
当我尝试在wchar_t字符串上使用memcpy时遇到错误。具体地说,尽管我发送给memcpy的长度与我要复制的字符串的长度正确,但仅复制了字符串中的前半个字符。这给我留下了目标字符串中不好的数据,因为字符串的后半部分充满了从字符串的新创建中遗留下来的垃圾字符。
下面的屏幕截图显示了我正在处理的确切问题:
我唯一能想到的是,这可能与我将非Unicode应用程序的语言环境设置为日语有关,但我要做的第一件事是将语言环境改回英语,问题仍然存在。我觉得我确实缺少一个非常明显的解决方案。有任何想法吗?
我有一个名为 的类Fstring,其中有一个wchar_t*。
我写了以下内容将字符串文字复制到Fstring:
#include <iostream>
using namespace std;
class Fstring{
wchar_t *arr;
public:
Fstring& operator = (const wchar_t temp[])
{
delete [] arr;
arr=new wchar_t[wcslen(temp)];
for(int i=0;i<=wcslen(temp);i++)
arr[i]=temp[i];
return *this;
}
};
int main()
{
Fstring test=L"Hello World";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但它没有用。编译器给了我以下错误:
错误 C2440:“正在初始化”:无法从“const wchar_t [12]”转换为“Fstring”
我真的很困惑,我在谷歌上搜索了“重载运算符”,但所有结果都与我用来重载运算符的方式相同。那么为什么这不起作用呢?