2011-04-18 144 views
4

这里有一个简单问题的C++新手。如何将CString的内容打印到控制台?C++/CLI打印CString到控制台的内容

这样做

int main(array<System::String ^> ^args) 
{    
    CString cs1 = _T("Hy"); 
    CString cs2 = _T(" u"); 
    CString cs3 = cs1 + cs2; 

    Console::WriteLine(cs3);  
    printf("%s", cs3); 
    return 0; 
} 

输出 “真”,并在控制台上的 “H”。 TIA。

+0

为什么你会在第一时间做到这一点?也就是说,为什么在C++/CLI中使用'CString'来覆盖'System :: String ^'? – ildjarn 2011-04-18 21:19:38

+0

只是一个测试示例,学习一些C++字符串基础知识。旧版应用程序正在使用Cstring。 – 2011-04-19 01:40:21

+2

如果你只是在学习基础知识,那么值得注意的是'CString'是* MFC的*字符串类; C++标准库的字符串类是['std :: string'](http://www.cppreference.com/wiki/string/basic_string/start)。 – ildjarn 2011-04-19 01:45:44

回答

5

我猜你正在编译开启Unicode,但printf是ANSI函数,所以它只打印字符串的第一个字符。使用_tprintf以匹配您_T字符串:

_tprintf(_T("%s"), cs3); 
+0

我需要什么,谢谢。 – 2011-04-19 01:47:46

0

您需要打印

printf("%s ", (LPCTSTR)cs3); 

前,投下您的CString这应该工作

+0

我认为这在技术上是正确的,但是ISTR CString实际上是这样安排的,以便您可以在这里摆弄不当行为。 – 2011-04-18 20:57:18

+0

这显示字符串中的第一个字符。 – 2011-04-19 01:48:11

3
Console::WriteLine(gcnew System::String(cs3)); 
+0

我改为使用Win32控制台应用程序,因此我无法再访问控制台。无论如何,谢谢。 – 2011-04-19 01:49:04

+0

@KlausNji这对你很好,但如果你愿意的话,请阅读这个问题。你的'main'是'int main(数组^args)',这是一个被管理的进程。 – 2014-02-12 12:46:14