gpt4 book ai didi

c - "for ( ; *p;++p) *p = tolower(*p);"在 c 中如何工作?

转载 作者:太空狗 更新时间:2023-10-29 15:02:09 30 4
gpt4 key购买 nike

我对编程还很陌生,只是想知道为什么这段代码:

for ( ; *p; ++p) *p = tolower(*p);

当 p 指向一个字符串时,可以降低 c 中字符串的大小写吗?

最佳答案

一般来说,这段代码:

for ( ; *p; ++p) *p = tolower(*p);

不会

works to lower a string case in c, when p points to a string?

它确实适用于纯 ASCII,但由于 char 通常是有符号类型,并且由于 tolower 需要非负参数(特殊值 除外EOF),该片段通常会有未定义的行为。

为避免这种情况,将参数转换为 unsigned char,如下所示:

for ( ; *p; ++p) *p = tolower( (unsigned char)*p );

现在它可以用于像 Latin-1 这样的单字节编码,前提是您通过 setlocale 设置了正确的语言环境,例如setlocale( LC_ALL, "");。但是,请注意,非常常见的 UTF-8 编码不是每个字符一个字节。要处理 UTF-8 文本,您可以将其转换为宽字符串并将其小写。


详细信息:

  • *p 是一个表达式,表示 p 指向的对象,大概是一个 char

  • 作为 for 循环的继续条件,*p 表示的任何非零 char 值都有效的逻辑 True,而字符串末尾的零 char 值具有逻辑 False 的效果,结束循环。

  • ++p 将指针前进到指向下一个 char

关于c - "for ( ; *p;++p) *p = tolower(*p);"在 c 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30660401/

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