C3872 MFC 字符串转换
C3872 MFC String conversion
给定以下代码:
CA2T strñ("ñ");
CA2T strñ("Ñ");
不知道为什么它不针对该字符编译,但适用于:
CA2T stradiaeresis("Ä");
CA2T strodiaeresis("Ö");
CA2T strudiaeresis("Ü");
错误 C3872"0xb1":标识符中不允许使用此字符
有什么办法吗?
如错误消息 C3872 中所述,您在标识符strñ
中使用了非法字符。合法字符的范围记录在标识符主题下。
要使代码编译,您必须使用合法标识符名称,例如
CA2T str_latin_small_letter_n_with_tilde("ñ");
CA2T str_latin_capital_letter_n_with_tilde("Ñ");
虽然这使得代码可以编译,但有几个问题需要解决:
CA2T
转换宏指示其源类型的 ANSI(代码页)编码。通常不希望使用 ANSI 编码。CA2T
转换宏将TCHAR
指定为其目标类型。这在今天永远不会有用。当Windows 98发布时,泛型文本映射不再有用。- 字符串文本使用 ANSI 编码。同样,ANSI 编码是不可取的,因为它受到限制,并且在移动到在不同区域设置中运行的编译器时可能会改变其含义。
如果您的愿望清单上的惊喜很低,请考虑将代码更改为以下内容:
CStringW str_latin_small_letter_n_with_tilde(L"ñ");
CStringW str_latin_capital_letter_n_with_tilde(L"Ñ");
这样做显式请求 Unicode 字符编码(在 Visual Studio 中为 UTF-16 LE)。在绝大多数情况下,这是您想要的。
相关文章:
- wcstombs_s(),转换字符串的长度
- 使用 CStringW/CStringA 和 CT2W/CT2A 转换字符串有什么区别?
- 无法转换字符串插入函数的参数
- 转换字符串向量:基于先前的值跳过元素
- 从中间器转换字符串不起作用,出了什么问题?
- 失败的证明转换字符串到枚举类
- 如何使用正则表达式和提升转换迭代器标记和转换 c 字符串
- 使用java jni时转换字符串类型
- 如何避免在转换字符串令牌流时重复istringstream构造
- 阿托伊未正确转换字符串
- C++,转换字符串,使连续下划线序列变为单个下划线
- 使用长算术转换字符串
- 转换字符串十进制数时的精度
- 将词法转换字符串提升为双精度
- 使用marshal_as函数转换字符串的性能
- C++不会从数据转换字符串
- 无论如何,在c++ /Qt中转换字符串到结构中的字段
- C++ 隐式类型转换字符串 -> int?
- 转换字符串到浮点数,c++实现
- 用于转换字符串大小写的函数