当C语言程序初始化时(刚进入到 main() 时),locale 被初始化为默认的 C locale,其采用的字符编码是所有本地 ANSI 字符集编码的公共部分,是用来书写C语言源程序的最小字符集(所以才起locale名叫:C)。
也就是说,默认locale是C,字符集是ascii
当我们的输入是一组带有中文或者其他字符的字符串时候,他就会截断。只会转化前面的ascii字符。
如果我们存在中文路径,或者字符,想使用wcstombs该函数来将宽字符串转为多字节字符串,那么我们就得设置系统的当前环境的locale.
主要是使用setlocale这个函数以及两个标记 LC_CTYPE, LC_ALL.
法1:
char* old_locale = _strdup(setlocale(LC_CTYPE,NULL)); //store the old locale
setlocale(LC_CTYPE,setlocale(LC_ALL,"")); //using the locale of the user env.
wcstombs(...)
setlocale(LC_CTYPE, old_locale); //restore the old locale.
free(old_locale);
法2:
setlocale(LC_ALL,""); //设置本地默认Locale
wcstombs(...)
setlocale(LC_ALL,"C"); //默认
头文件:
c: <stdlib.h>
c++:<cwchar>