gpt4 book ai didi

c++ - C/C++ isspace() 跳过多字节字符串字符

转载 作者:太空宇宙 更新时间:2023-11-04 01:31:32 27 4
gpt4 key购买 nike

我有以下函数返回字符串中的空格,

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。非常感谢任何帮助。

谢谢。

最佳答案

问题是你如何调用isspace . isspace仅有的如果输入在 [0,UCHAR_MAX] 范围内,则已定义结果(或者是 EOF )。在您的系统上,char可能已签名,这意味着 (int)*lptr将导致负值的重音字符(代码点大于 127 的字符),不在合法范围内。

调用is...的单参数形式时(那些在 <cctype><ctype.h> ), 你应该总是施放任何 char输入 unsigned char : isspace( static_cast<unsigned
char>( *lptr ) )
. (unsigned char 的隐式转换至 int会做正确的事。)

关于c++ - C/C++ isspace() 跳过多字节字符串字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21754174/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com