将 TCHAR 添加到字符串:不起作用
Adding a TCHAR to a wstring: doesn't work
我有一些非常简单的事情要做,我试图提示用户输入字符&将该字符保存到字符串中。然后打印整个字符串
该程序适用于windows,但我希望该程序适用于ASCII &Unicode,这就是为什么我使用TCHAR, &wstring .
我的问题:我无法添加字符(用户输入)到一个wstring。它不会存储在那个变量中。为什么?
我的简单代码:#include <windows.h>
#include <tchar.h>
#include <conio.h>
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
int main()
{
// I am using wstring for unicode compatibility but in Windows(MSDN) is there a general
// string variable? You know how there is char, wchar & then TCHAR(which is a general variable
// for both ASCII & unicode). Is there a TSTRING or something?
wstring chStr = L"abc";
TCHAR ch = L'a';
while ( ch != '!' )
{
printf("Enter a character: ");
ch = getch();
chStr += ch; // the string never takes on a char it always remains as "a"
printf("nThe characters entered so far are: %s n", chStr.c_str());
}
system("PAUSE");
return 0;
}
您可以使用tchar* input
,然后
wstring chStr = L"abc";
std::wstring s(input)
chStr += s;
http://linux.about.com/library/cmd/blcmdl3_wprintf.htm
表示需要使用使用wprintf()
:)
你看,它将宽字符串读取为一个char和一个null的char字符串
您的测试没有显示您认为它显示的内容。
printf
函数需要%s
格式规范的ASCII字符串参数。字母a
的UNICODE表示是0x0061,它在内存中存储为0x61, 0x00(因为我们处理的是一个小端系统)。由于printf将内存解释为ASCII字符串,因此0x61, 0x00看起来是一个以空结束的字符串,长度为一个字符,因此这就是您打印的内容。
使用TCHAR已经没有意义了。TCHAR类型是WCHAR或char,具体取决于是否定义了宏UNICODE。如果您想编写可以编译两次的代码——一次用于ASCII,一次用于UNICODE, TCHAR非常有用。例如,当您希望编写可以在ASCII平台(如Windows 95)上有效运行的编译代码,并再次编译以在UNICODE平台(如Windows XP)上有效运行的代码时。
现在所有的Windows操作系统都是原生的UNICODE, TCHAR没有太多的用途,使用它有一定的风险。
例如,你的代码TCHAR ch = L'a';
在编译UNICODE时是有效的,因为在这种情况下,TCHAR被定义为WCHAR。但是,在编译非UNICODE时,TCHAR被定义为char,并且将像L'a'
这样的UNICODE字符分配给char变量实际上没有意义。你不一定会得到一个语法错误,但你也不一定会得到你想要的代码。
注意我在上面使用"ASCII"的地方可能应该说"多字节字符集"或"非unicode字符集",因为并非所有非unicode字符集都是ASCII。
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 尝试使用C++中的模板进行BST排序,但在使用随机字符串进行测试时不起作用
- boost::spirit::x3 中的简单字符串解析器不起作用
- 用于拆分空格字符串的程序不起作用
- 比较字符串的 GetLine 工作一次,然后比较之后不起作用
- C++11+=当RHS有多个字符串或字符时,运算符不起作用
- 将字符从一个字符串简单分配到另一个字符串不起作用
- C++ 对象数组字符串输入在控制台上不起作用
- 字符串代码不起作用
- 检查字符串中的小写字符或空格.布尔值不起作用
- 在C 中使用Atof将字符串转换为小数不起作用
- 字符串等于不起作用 C++
- 从中间器转换字符串不起作用,出了什么问题?
- 为什么strcpy()不起作用,请接受字符串作为参数
- 在字符串中找到元音不起作用
- C++将字符串写入文本文件中的行;新行问题不起作用
- int 有效,但字符串::size_type不起作用
- C++ 如果要替换的句子具有"+"符号,则替换字符串功能不起作用
- C++字符串不起作用
- 排序功能不起作用(字符串比较问题)