我目前正在编写一个应用程序,它要求我在任意窗口上调用GetWindowText并将该数据存储到文件中以供以后处理.长话短说,我注意到我的工具在"战地3"中失败了,我将问题缩小到其窗口标题中的以下字符:http: //www.fileformat.info/info/unicode/char/2122/index. HTM
所以我创建了一个小测试应用程序,它只执行以下操作:
std::wcout << L"\u2122";
Run Code Online (Sandbox Code Playgroud)
低并且看到在程序的其余部分中断输出到控制台窗口.
当MessageBoxW等API显示它时,为什么MSVC STL会阻塞这个角色(我假设其他人)?
如何将这些字符打印到我的文件中?
在Windows 7 x64下测试VC10和VC11.
抱歉这个构造不好的帖子,我在这里撕扯我的头发.
谢谢.
编辑:
最小的测试用例
#include <fstream>
#include <iostream>
int main()
{
{
std::wofstream test_file("test.txt");
test_file << L"\u2122";
}
std::wcout << L"\u2122";
}
Run Code Online (Sandbox Code Playgroud)
预期结果:'™'字符打印到控制台和文件.观察结果:文件已创建但为空.没有输出到控制台.
我已经确认我用于我的控制台的字体能够显示有问题的字符,并且该文件肯定是空的(大小为0字节).
编辑:
进一步的调试表明,在流中设置了'failbit'和'badbit'.
编辑:
我也尝试过使用Boost.Locale,即使全新的语言环境充满了所有标准流,我也遇到了同样的问题.
我对将std :: string作为const引用返回有疑问.
class sample
{
public:
std::string mString;
void Set(const std::string& s)
{
mString = s;
}
std::string Get()
{
return mString;
}
};
Run Code Online (Sandbox Code Playgroud)
在Set函数中,我将std :: string作为const引用传递给const,因为它的值在函数内部没有变化.
而在Get功能中,实际上我在这里很困惑.返回std :: string作为值更有意义.但我不确定,通过传递字符串作为const引用有任何好处.通过回转字符串作为参考将增加exectuion速度,我想是的,但我不确定.但是将它作为'const返回可以为此带来任何好处?
我需要C++中的微优化建议用于矢量比较函数,它比较两个向量的相等性和元素的顺序无关紧要.
template <class T>
static bool compareVectors(const vector<T> &a, const vector<T> &b)
{
int n = a.size();
std::vector<bool> free(n, true);
for (int i = 0; i < n; i++) {
bool matchFound = false;
for (int j = 0; j < n; j++) {
if (free[j] && a[i] == b[j]) {
matchFound = true;
free[j] = false;
break;
}
}
if (!matchFound) return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
这个功能被大量使用,我正在考虑优化它的可能方法.你能给我一些建议吗?顺便说一句,我使用的是C++ 11.
谢谢
我在tmux中使用mcabber和beep选项.我希望mcabber发出哔哔声,但不希望tmux在启动,附加或分离时发出蜂鸣声.
# disable sound bell
set -g bell-action none
# disable visual bell
set -g visual-bell off
Run Code Online (Sandbox Code Playgroud)
我发现了这个,但这会禁用mcabber发出哔哔声并且不会禁用连接/分离蜂鸣声.如何在tmux中禁用附加/分离蜂鸣声?
我只是汇编语言的初学者,可能有一些愚蠢的问题。这两行有什么区别?
3e 8b 06 mov eax,DWORD PTR ds:[esi]
8b 06 mov eax,DWORD PTR [esi]
Run Code Online (Sandbox Code Playgroud)
在我看来它也是如此,我也尝试过这个程序:
int main()
{
__asm
{
mov esi, ebx
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR ds:[esi]
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这证实了我的猜测,所以问问你们,如果有什么不同。为什么我们需要两条执行相同但具有不同长度操作码的指令。
我应该使用哪个STL容器:
例如:数据集(4,10,15)如果我想找到最接近9的数字,那么它应该返回10.
我想过使用矢量,但矢量插入和移除是昂贵的.
vector<int>
Run Code Online (Sandbox Code Playgroud)
如果我要使用list,我必须在到达数据之前访问O(n)元素.
list<int>
Run Code Online (Sandbox Code Playgroud)
我正在考虑使用set,因为如果它被排序会很好,但我不太确定使用SET的效率
所以我希望有人能给出一个好的解决方案!
我正在尝试实现双缓冲但它似乎不起作用,即图形仍然闪烁.
每次鼠标移动时都会调用WM_PAINT.(WM_MOUSEMOVE)
粘贴WM_PAINT如下:
case WM_PAINT:
{
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
RECT rect;
GetClientRect(hWnd, &rect);
int width=rect.right;
int height=rect.bottom;
HDC backbuffDC = CreateCompatibleDC(hdc);
HBITMAP backbuffer = CreateCompatibleBitmap( hdc, width, height);
int savedDC = SaveDC(backbuffDC);
SelectObject( backbuffDC, backbuffer );
HBRUSH hBrush = CreateSolidBrush(RGB(255,255,255));
FillRect(backbuffDC,&rect,hBrush);
DeleteObject(hBrush);
if(fileImport)
{
importFile(backbuffDC);
}
if(renderWiredCube)
{
wireframeCube(backbuffDC);
}
if(renderColoredCube)
{
renderColorCube(backbuffDC);
}
BitBlt(hdc,0,0,width,height,backbuffDC,0,0,SRCCOPY);
RestoreDC(backbuffDC,savedDC);
DeleteObject(backbuffer);
DeleteDC(backbuffDC);
EndPaint(hWnd, &ps);
}
Run Code Online (Sandbox Code Playgroud) 我想写一个std::wstring文件,需要读取该内容std:wstring.当字符串为时,会发生这种情况L"<Any English letter>".但是当我们有像孟加拉语,卡纳达语,日语等字符,任何类型的非英语字母时,问题就出现了.试过各种选择,如:
std::wstring为std::string写入文件并将读取时间读取为std::string转换为std::wstring
std::wstringwofstream,这对于母语字母也没有帮助 std::wstring data = L"?????? ?????????";平台是mac和Linux,语言是C++
码:
bool
write_file(
const char* path,
const std::wstring data
) {
bool status = false;
try {
std::wofstream file(path, std::ios::out|std::ios::trunc|std::ios::binary);
if (file.is_open()) {
//std::string data_str = convert_wstring_to_string(data);
file.write(data.c_str(), (std::streamsize)data.size());
file.close();
status = true;
}
} catch (...) {
std::cout<<"exception !"<<std::endl;
}
return status;
}
// Read Method
std::wstring
read_file(
const char* filename
) …Run Code Online (Sandbox Code Playgroud)