#include <windows.h> #ifndef UNICODE #define UNICODE #endif int GetStrArrLen(int count, ...); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd) { TCHAR str[30] = {NULL}; LPTSTR pSzStrArr[5] = {NULL}; #ifdef UNICODE pSzStrArr[0] = TEXT("Unicode character set!/n/r"); #else pSzStrArr[0] = TEXT("ANSI character set!/n/r"); #endif pSzStrArr[1] = lpCmdLine; pSzStrArr[2] = new TCHAR[GetStrArrLen(2, pSzStrArr[0], pSzStrArr[1]) + 1]; lstrcpy(pSzStrArr[2], pSzStrArr[0]); lstrcat(pSzStrArr[2], pSzStrArr[1]); pSzStrArr[3] = str; wsprintf(pSzStrArr[3], TEXT("/n/r/n/r Total character number: %i"), lstrlen(pSzStrArr[2])); pSzStrArr[4] = new TCHAR[GetStrArrLen(2, pSzStrArr[2], pSzStrArr[3]) + 1]; lstrcpy(pSzStrArr[4], pSzStrArr[2]); lstrcat(pSzStrArr[4], pSzStrArr[3]); ::MessageBox(NULL, pSzStrArr[4], TEXT("MessageBox"), MB_DEFBUTTON2 | MB_ICONINFORMATION | MB_ABORTRETRYIGNORE); delete [] pSzStrArr[2]; delete [] pSzStrArr[4]; return 0; } int GetStrArrLen(int count, ...) { int len = 0; va_list pStack; va_start(pStack, count); for (int i = 0; i < count; ++i) len += lstrlen(va_arg(pStack, TCHAR*)); va_end(pStack); return len; } 执行结果如下: