【问题标题】:Converting case and cast warnings转换大小写和强制转换警告
【发布时间】:2015-10-10 20:00:48
【问题描述】:

我正在尝试制作一个程序来将 char 转换为小写或大写,具体取决于输入的内容。我不想使用 ctype.h 的 toupper()tolower() 函数。

我的ConvertCase 函数如下所示:

char ConvertCase(char input) {
    char convertedChar = 0;

    if (('a' <= input) && (input <= 'z')) {
        convertedChar = (char)ConvertLowerToUpper;
    }
    else if (('A' <= input) && (input <= 'Z')) {
        convertedChar = (char)ConvertUpperToLower;
    }
    else {
        return input;
    }

    return convertedChar;
}

我的两个实际转换器如下所示:

char ConvertLowerToUpper(char input) {
    return input - 32;
}

从上到下用加法代替减法。

当我编译时,我得到两个警告,

cast from pointer to integer of different size [-Wpointer-to-int-cast] convertedChar = (char)ConvertLowerToUpper;

每个演员一个。而且我真的不明白这是什么意思。如果我省略演员表,我会得到 ​​p>

assignment makes integer from pointer without a cast [-Wint-conversion]
     convertedChar = ConvertUpperToLower;

如果我忽略警告并测试我的程序,它会返回一个从大写到小写的“�”,一个从小写到大写的空白字符。

我该如何解决这个问题?感谢您的帮助!

【问题讨论】:

  • 您需要实际调用ConvertLowerToUpperConvertUpperToLower。现在您正尝试将指向这些函数的指针分配给convertedChar。提示:当编译器抱怨“没有强制转换的东西”时,强制转换通常不是解决方案。
  • ConvertLowerToUpper(input) 而不是 ConvertLowerToUpper
  • 呸。谢谢@helpYou 和Kninnug,我不知道为什么我没有意识到这一点!问题解决了!有没有办法将评论标记为答案?
  • @Dradee 不,没有,这就是人们需要停止在 cmets 中发布答案的原因!
  • 没有。 @Kninnug,您可以将其发布为答案吗?

标签: c casting uppercase lowercase


【解决方案1】:

您需要实际调用ConvertLowerToUpperConvertUpperToLower。现在您正尝试将指向这些函数的指针分配给convertedChar

提示:当编译器抱怨“没有强制转换的东西”时,强制转换通常不是解决方案。

【讨论】:

    猜你喜欢
    • 2017-02-11
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 2021-05-28
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    相关资源
    最近更新 更多