1

我对执行此操作的正确方法有些困惑。我有一个#DEFINE包含一个字符串的,我有一个CHAR16*我想设置为那个字符串的。我将如何正确地做到这一点?我试过了:

#DEFINE MYSTRING "HELLO"

CHAR16* THISONE;

THISONE = MYSTRING;

为什么这行不通?我希望能够打印出THISONE. 我收到有关不兼容类型的编译器警告。我确定我错过了一些小东西?

4

3 回答 3

5

您正在定义一个窄字符串文字"HELLO",但尝试使用CHAR16指向它的指针。这不是一个兼容的任务。正如clang所说:

example.cpp:9:13: error: assigning to 'wchar_t *' from incompatible type
      'const char [6]'
    THISONE = MYSTRING;
            ^ ~~~~~~~~
1 error generated.

(我将类型从更改为CHAR16 *wchar_t *因为我不在 Windows 上 - 语义是相同的)。

要修复它,您需要L在字符串常量前面添加一个:

#define MYSTRING L"HELLO"

然后它会编译。在 C 中,你完成了。但是,在 C++ 中,您可能仍会收到警告:

example.cpp:9:15: warning: conversion from string literal to 'wchar_t *' is
      deprecated [-Wdeprecated-writable-strings]
    THISONE = MYSTRING;
              ^
example.cpp:3:18: note: expanded from macro 'MYSTRING'
#define MYSTRING L"HELLO"
                 ^
1 warning generated.

将定义更改为:

const wchar_t *THISONE;

修复该警告。我猜你的情况是:

const CHAR16 *THISONE;

编者注——以后请出示你的真实代码。 #DEFINE(大写字母)不是有效的 C 或 C++。

于 2013-06-26T17:38:34.140 回答
2

你可能想要这样的东西:

// Update: As carl points out, there is more to this for wide chars
const CHAR16* THISONE = MYSTRING;

您可以在此处以及在此站点中探索更多关于c-strings 的信息

于 2013-06-26T17:35:48.743 回答
1

您可能希望将其分配为全局变量。在这种情况下,您需要:

#define MYSTRING "HELLO"
CHAR* THISONE = MYSTRING;

或者

#define MYSTRING L"HELLO"
CHAR16* THISONE = MYSTRING;

如果赋值在函数中(main() 或其他),您可以在与变量创建不同的位置进行赋值。

实际上,我不确定是否有“CHAR16”这样的类型

于 2013-06-26T17:46:29.550 回答