Chúng tôi cần phải vượt qua một định dạng _TCHAR * chuỗi, và một số char * chuỗi thành một chức năng với args chiều dài thay đổi:Làm cách nào để chuyển đổi từ _TCHAR * sang char * khi sử dụng độ dài biến đổi C++?
inline void FooBar(const _TCHAR *szFmt, const char *cArgs, ...) {
//...
}
Vì vậy, nó có thể được gọi như vậy:
char *foo = "foo";
char *bar = "bar";
LogToFileA(_T("Test %s %s"), foo, bar);
Rõ ràng là một sửa chữa đơn giản sẽ là sử dụng _TCHAR thay vì char, nhưng chúng tôi không có sự sang trọng đó không may.
Chúng tôi cần phải sử dụng điều này với va_start, vv vì vậy chúng tôi có thể định dạng một chuỗi:
va_list args;
_TCHAR szBuf[BUFFER_MED_SIZE];
va_start(args, cArgs);
_vstprintf_s(szBuf, BUFFER_MED_SIZE, szFmt, args);
va_end(args);
Đáng tiếc là chúng ta không thể sử dụng điều này bởi vì nó cung cấp cho chúng tôi lỗi này:
Unhandled exception at 0x6a0d7f4f (msvcr90d.dll) in foobar.exe:
0xC0000005: Access violation reading location 0x2d86fead.
Tôi đang nghĩ chúng ta cần chuyển đổi char * thành _TCHAR * - nhưng làm thế nào?
nếu bạn có sự sang trọng của việc sử dụng một WCHAR * thay vì một char *, tôi nghĩ rằng sẽ khắc phục bạn vấn đề –
Hmm, tiếc là không - hệ thống hiện tại là một mish-mash của char * và _TCHAR * –
thats quá xấu ... là hiệu quả một vấn đề? nếu không, hãy nhìn vào câu trả lời của tôi, nó làm việc cho tôi –