【问题标题】:Filling up a TCHAR array via for loop通过 for 循环填充 TCHAR 数组
【发布时间】:2020-05-25 02:12:42
【问题描述】:

我正在尝试遍历 TCHAR 数组,并且对于每次循环迭代,将迭代次数转换为字符串并将其保存到数组中。

下面的代码是我所拥有的:

#undef  UNICODE
#define UNICODE
#undef  _UNICODE
#define _UNICODE

#include <tchar.h>
#include <string>
#include <windows.h>
#include <strsafe.h>
#include <stdlib.h>
#include <stdio.h>
#include <algorithm>

LRESULT CALLBACK MyTextWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 //do stuff...

#define LINES 56
static TCHAR *abc[LINES];

for(unsigned int l = 0; l<(LINES-1); l ++){
   std::wstring s = std::to_wstring(l);
   abc[l]=TEXT(s.c_str());
}

但它在 CodeBlocks 中给出以下错误:

错误:“Ls”未在此范围内声明

我尝试阅读有关 TCHAR 和 TEXT 宏的信息。根据这里https://docs.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-text TEXT 宏需要一个指向字符串的指针,这就是我尝试使用 .c_str() 的原因

【问题讨论】:

  • 1.您不能在函数之外编写循环; 2.那个微软页面似乎与现实无关。
  • 实际上循环在 WindowProc 内 - 我刚刚修改了我的代码以显示这一点。

标签: c++ tchar


【解决方案1】:

TEXT(或_T)宏用于字符串("string"),而不是变量。如果使用UNICODE 编译(或者是_UNICODE?我不记得了),它将在参数前放置一个前导L,因此字符串将变为L"string"

wstring 类将返回一个 wchar_t * 指针,您可以将其分配给您的 TCHAR * 值。但是,您的 wstring 对象是本地对象,并在循环迭代结束时被销毁。您需要为 TCHAR * 值动态分配空间,或者分配一个 wstring 对象数组来保存构造的字符串,这些字符串将一直存在,直到您完成使用 abc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 2016-03-09
    • 2021-12-03
    相关资源
    最近更新 更多