我有以下函数返回剥离从字符串中的空格,C/C++ isspace()所能跳过多字节字符串字符
char *rtrim(char *l_ptr)
{
char *lptr = l_ptr + strlen(l_ptr) - 1;
for (; lptr != l_ptr && isspace((int)*lptr); lptr--)
;
*lptr = '\0';
return lptr;
}
char *ltrim(char *l_ptr)
{
char *lptr;
for (lptr = l_ptr; *lptr != '\0' && isspace((int)*lptr); lptr++)
;
return lptr;
}
char *trim(char *l_ptr) {
return rtrim(ltrim(l_ptr));
}
的问题是它的修整字符以下 -
去除导致从空格“
Ć"
除去前导空格,得到的 “”
的字符是0xc6,之前有几个空格。我已经检查了包含setlocale(LC_ALL,“”);的代码。 LANG设置为pl_PL.isoo88592。任何帮助非常感谢。
谢谢。
什么字符编码您使用的? –
@JohnZwinck从他的LANG设置中,我猜测ISO 8859-2(Latin-2,东欧)。 –
注意:'char * lptr = l_ptr + strlen(l_ptr) - 1;'如果'l_ptr'为'“”'则为UB。 (也可能是一个_long_循环。) – chux