【问题标题】:function tolower() not converting函数 tolow() 不转换
【发布时间】:2014-05-28 17:35:21
【问题描述】:

这段代码有什么问题?我不知道发生了什么。

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char *s = "OKAY";

    for (int i = 0; i < 4; i++)
        tolower(s[i]);

    printf("\n%s\n", s);

    return 0;
}

输出:

OKAY

【问题讨论】:

  • 阅读tolower()的文档,想想你的代码做了什么。
  • 其实没有什么“代码有问题”。
  • 顺便说一句,tolower() 已经过去了一个世纪。它不处理一些边缘情况(德语 ß/SS,土耳其语 I/ı/i,...)。您可能需要 ICU 之类的东西来进行正确的病例映射。

标签: c tolower


【解决方案1】:

您需要将tolower 的返回值分配给s,但这会调用未定义的行为,因为字符串文字是不可修改的,因为它们位于内存的只读部分。你不能修改它。试试这个吧

char s[]= "OKAY";
for (int i = 0; i < 4; i++)
    s[i] = tolower(s[i]);

【讨论】:

  • 你很幸运"OKAY" 只包含基本字符集中的字符。如果没有,程序将导致未定义的行为。有关原因,请参阅 tolower 的任何好的文档。
  • @RolandIllig;是的,我知道:)
【解决方案2】:

tolower 函数返回输入字符的等效小写字母。它不会就地修改它。

【讨论】:

    【解决方案3】:
    char s[] = "OKAY";
    
    for (int i = 0; i < 4; i++)
        s[i]=tolower(s[i]);
    

    【讨论】:

    • @hacks 它没有提供任何解释,因此没有帮助。
    • @JoeFrambach 我没有标记这个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多