#1
by C++er » 6年前
日本語Win10でvisual studio 2017 C++ を使っていますが、以下のコードを実行すると、
int WINAPI WinMain(HINSTANCE hCurrInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
setlocale(LC_CTYPE, ""); //<--- SJIS
char s[16];
sprintf(s, u8"取得");
return 0;
}
sprintf 内でアサーションエラーが起きます。
>>>>>>>>>
Debug Assertion Failed!
Program: D:\test\test.exe
File: minkernel\crts\ucrt\inc\corecrt_internal_stdio_output.h
Line: 1700
Expression: _format_char != '\0'
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
<<<<<<<<<
setlocale を削除するか、sprintf(s, "%s", u8"取得") とすれば直るのですが、
何故エラーが起きるのでしょうか??
"取得" という文字列はutf8にすると E58F96 E5BE97 ですが、
とくにSJISでの危険な文字と重なっているようにも思えません。
日本語Win10でvisual studio 2017 C++ を使っていますが、以下のコードを実行すると、
int WINAPI WinMain(HINSTANCE hCurrInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
setlocale(LC_CTYPE, ""); //<--- SJIS
char s[16];
sprintf(s, u8"取得");
return 0;
}
sprintf 内でアサーションエラーが起きます。
>>>>>>>>>
Debug Assertion Failed!
Program: D:\test\test.exe
File: minkernel\crts\ucrt\inc\corecrt_internal_stdio_output.h
Line: 1700
Expression: _format_char != '\0'
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
<<<<<<<<<
setlocale を削除するか、sprintf(s, "%s", u8"取得") とすれば直るのですが、
何故エラーが起きるのでしょうか??
"取得" という文字列はutf8にすると E58F96 E5BE97 ですが、
とくにSJISでの危険な文字と重なっているようにも思えません。