【发布时间】:2014-02-13 12:24:03
【问题描述】:
我有以下函数返回从字符串中去除空格,
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,用于东欧)。
-
注意:如果
l_ptr是"",则char *lptr = l_ptr + strlen(l_ptr) - 1;是UB。 (也许也是一个 long 循环。) -
如果
char已签名,则字符不是 0xC6,而是-0x3A。相同的 8 位模式,带有 2 的补码,但提升为int时的值不同。