【问题标题】:Comparison of character in C literal stringC文字字符串中的字符比较
【发布时间】:2010-01-01 10:57:27
【问题描述】:

以下程序无法按我的预期运行。

#include <string.h>
#include <stdio.h>

int main()
{
    const char *c = "abcdef";

    // prints 'f' as expected
    printf("%c\n", c[5]);

    // comparison fails, does not print "yes"
    if (c[5] == 'f')
        printf("yes");
    return 0;
}

如何将字符串文字中的字符与字符值进行比较?是否可以不使用 ASCII 相关函数,即 chr() 或 ord() 假设它们存在。 (我记得在 Pascal 时代使用它们)

谢谢

【问题讨论】:

  • 试试printf("yes\n");puts("yes");。你不需要string.h
  • 好吧,我觉得自己很笨。我错过了,正如马特·格里尔指出的那样

标签: c string char


【解决方案1】:

您的环境肯定有其他问题。我只是把它扔到 gcc 中,它按预期打印出“是”。

你确定你不只是错过了“是”,因为 printf 默认不添加新行,所以它可能是“是[你的 shell 提示符]”,而你只是忽略了是吗?

【讨论】:

    【解决方案2】:

    我看不出代码有什么问题,除了:

    • 您应该以换行符结束您的输出。我建议puts("yes");(或者如果你想使用printf()printf("yes\n");)。
    • 你不需要string.h
    • 您所做的比使用 ASCII 或任何其他编码要好。您进行的比较适用于所有编码,而如果您使用 ASCII 比较,则在使用非 ASCII 编码的平台上会出现问题。所写的比较很好。

    主要问题似乎是输出没有以换行符终止。

    【讨论】:

      【解决方案3】:

      当您尝试使用printf 访问索引5 处的字符并获取'f'
      现在您没有在任何地方修改字符串(您不能将其修改为字符串常量)。
      稍后,您将索引 5 处的相同字符与字符常量 'f' 进行比较。该测试应该返回true,并且应该在输出中打印“yes”。

      【讨论】:

        猜你喜欢
        • 2015-02-11
        • 2013-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-19
        • 2016-02-08
        • 2013-11-22
        相关资源
        最近更新 更多