小编ST3*_*ST3的帖子

Windows Unicode C++流输出失败

我目前正在编写一个应用程序,它要求我在任意窗口上调用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,即使全新的语言环境充满了所有标准流,我也遇到了同样的问题.

c++ windows unicode stl wofstream

11
推荐指数
1
解决办法
4049
查看次数

将std :: string作为const引用返回

我对将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++ string const reference stdstring

11
推荐指数
3
解决办法
3万
查看次数

如何有效地比较矢量与C++?

我需要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.

谢谢

c++ c++11

10
推荐指数
3
解决办法
2万
查看次数

tmux - 禁用连接/分离时的蜂鸣声

我在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中禁用附加/分离蜂鸣声?

linux bash beep tmux

10
推荐指数
1
解决办法
2059
查看次数

检查Windows OS是否以安全模式运行

我需要什么Windows API调用才能检查系统是以安全模式还是以正常模式启动?

windows winapi

9
推荐指数
1
解决办法
1393
查看次数

size_t的值无效

人们用什么来表示size_t无效?-1不起作用,0可以是有效大小.

c

8
推荐指数
2
解决办法
5393
查看次数

汇编语言中“ds:”的含义

我只是汇编语言的初学者,可能有一些愚蠢的问题。这两行有什么区别?

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)

这证实了我的猜测,所以问问你们,如果有什么不同。为什么我们需要两条执行相同但具有不同长度操作码的指令。

x86 assembly

8
推荐指数
1
解决办法
1万
查看次数

使用哪个STL容器?

我应该使用哪个STL容器:

  1. 定期插入和删除数据.
  2. 随机定期访问数据.

例如:数据集(4,10,15)如果我想找到最接近9的数字,那么它应该返回10.

  1. 我只存储一个整数.
  2. 它需要排序
  3. 可以转到100k数据集

我想过使用矢量,但矢量插入和移除是昂贵的.

   vector<int>
Run Code Online (Sandbox Code Playgroud)

如果我要使用list,我必须在到达数据之前访问O(n)元素.

   list<int>
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用set,因为如果它被排序会很好,但我不太确定使用SET的效率

所以我希望有人能给出一个好的解决方案!

c++ containers stl

7
推荐指数
2
解决办法
2万
查看次数

双缓冲?Win32 c ++

我正在尝试实现双缓冲但它似乎不起作用,即图形仍然闪烁.

每次鼠标移动时都会调用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)

c++ gdi win32gui

7
推荐指数
1
解决办法
7410
查看次数

如何将非英语字符串写入文件并使用C++从该文件中读取?

我想写一个std::wstring文件,需要读取该内容std:wstring.当字符串为时,会发生这种情况L"<Any English letter>".但是当我们有像孟加拉语,卡纳达语,日语等字符,任何类型的非英语字母时,问题就出现了.试过各种选择,如:

  1. 转换std::wstringstd::string写入文件并将读取时间读取为std::string转换为std::wstring
    • 写作正在发生(我可以从edito看到),但阅读时间错误的角色
  2. 写入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)

c++ wifstream clang++ wofstream

7
推荐指数
1
解决办法
1278
查看次数

标签 统计

c++ ×6

stl ×2

windows ×2

wofstream ×2

assembly ×1

bash ×1

beep ×1

c ×1

c++11 ×1

clang++ ×1

const ×1

containers ×1

gdi ×1

linux ×1

reference ×1

stdstring ×1

string ×1

tmux ×1

unicode ×1

wifstream ×1

win32gui ×1

winapi ×1

x86 ×1