2010-05-11 37 views
6

Tôi khá chắc chắn rằng đó là vấn đề ngu ngốc nhưng nó khiến tôi phát điên ..in TCHAR [] trên bảng điều khiển

Tôi có thể in trên bàn điều khiển một mảng TCHAR như thế nào?

DWORD error = WSAGetLastError(); 
TCHAR errmsg[512]; 
int ret = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, error, 0, errmsg, 511, NULL); 

tôi cần phải in errmsg ...

+0

Thậm chí nếu bạn có chương trình ghi UTF16 đúng vào bảng điều khiển, Lưu ý rằng giao diện điều khiển Windows không thân thiện với UTF16 và có thể chỉ hiển thị rác. Xem câu hỏi này để biết cách giải quyết: http://stackoverflow.com/q/10764920/845092 –

Trả lời

10

Tùy thuộc vào những gì TCHAR là. Nếu bạn biên dịch với Unicode được bật, TCHAR được định nghĩa là wchar_t. Sau đó, bạn có thể sử dụng std::wcout, ví dụ:

std::wcout << L"Error: " << errmsg << '\n'; 

Nếu Unicode không được kích hoạt, TCHAR là một bình thường char và bạn có thể sử dụng bình thường std::cout:

std::cout << "Error: " << errmsg << '\n'; 
+0

cảm ơn rất nhiều :)! – hara

+6

Điểm quan trọng trong việc sử dụng TCHAR nếu bạn định làm cho chương trình của bạn phụ thuộc vào việc nó là 'char' hay' wchar_t'? Toàn bộ vấn đề của nó là làm việc bất kể bạn đang sử dụng bộ ký tự nào, đúng không? – Strigoides

+0

@Strigoides: Khá phổ biến khi giả sử 'TCHAR' ==' wchar_t'. Khá nhiều không ai sử dụng 'TCHAR' ==' char'. Tôi đồng ý với nó là vô nghĩa, nhưng tôi nghĩ rằng nó _is_ các chỉ tiêu, đặc biệt là đối với những người vẫn còn sử dụng MFC. –

2
#include <tchar.h> /* _tprintf */ 

DWORD dwError; 
BOOL fOk; 
HLOCAL hlocal = NULL; // Buffer that gets the error message string 

fOk = FormatMessage(
    FORMAT_MESSAGE_FROM_SYSTEM | 
    FORMAT_MESSAGE_IGNORE_INSERTS | 
    FORMAT_MESSAGE_ALLOCATE_BUFFER, 
    NULL, dwError, 0, (PTSTR) &hlocal, 0, NULL); 
if (! fOk) hlocal = TEXT("Fehler FormatMessage"); 
_tprintf(TEXT("%d\t%s\n"), dwError, hlocal); 
if (fOk) LocalFree(hlocal); 
-2

Tôi thực sự không biết tại sao nhưng mã này hoạt động cho tôi:

TCHAR NPath[MAX_PATH]; 
    DWORD a = GetCurrentDirectory(MAX_PATH, NPath); 
    string b = ""; 
    for(int i=0; i<a;i++){ 
     b+=NPath[i]; 
    } 
    cout << b; 
    system("pause"); 

Xin lỗi nhưng tôi không thể giải thích lý do tại sao nó hoạt động và không có thời gian để tìm kiếm nó ngay bây giờ. Một lát sau!

Các vấn đề liên quan