【问题标题】:Array subscript has type 'char' warning is showed without using arrays数组下标的类型为 'char' 警告在不使用数组的情况下显示
【发布时间】:2014-07-15 02:46:41
【问题描述】:

嗨,我在这个简单的代码中收到了这个奇怪的警告,让我完全困惑。我在页面中进行了搜索,发现这是一个警告,提醒用户避免使用字符作为矩阵的索引,因为它们可以被签名,但显然情况并非如此。

代码如下:

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

int main() {

    char c='t';
    if (isspace(c)==0)
        printf ("%c is not a space",c);

    return (EXIT_SUCCESS);
}

我的问题是警告的原因是什么?这与isspace 期望一个 int 作为参数有关吗?

【问题讨论】:

  • 需要"#include &lt;stdlib.h&gt;

标签: c warnings ctype


【解决方案1】:

警告用户避免使用字符作为矩阵的索引,因为它们可以被签名,但显然情况并非如此

其实是这样的……你看到的不是编译器看到的。

这是否与 isspace 需要一个 int 作为参数的事实有关?

是的; isspace 是一个宏,它(在您的编译器实现中)访问一个数组...查看您的 ctype.h 或要求您的编译器扩展宏(例如 gcc -E),您将看到数组访问。

要避免警告,请使用

if (!isspace((unsigned char)c))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 2022-12-09
    相关资源
    最近更新 更多