【发布时间】:2015-04-24 22:15:48
【问题描述】:
我正在关注该教程,我正在使用 cygwin 编译器运行 WindowsXP 32 位,该教程要求我运行此代码:
#include <stdio.h>
#include <ctype.h>
// forward declarations
int can_print_it(char ch);
void print_letters(char arg[]);
void print_arguments(int argc, char *argv[])
{
int i = 0;
for(i = 0; i < argc; i++) {
print_letters(argv[i]);
}
}
void print_letters(char arg[])
{
int i = 0;
for(i = 0; arg[i] != '\0'; i++) {
char ch = arg[i];
if(can_print_it(ch)) {
printf("'%c' == %d ", ch, ch);
}
}
printf("\n");
}
int can_print_it(char ch)
{
return isalpha(ch) || isblank(ch);
}
int main(int argc, char *argv[])
{
print_arguments(argc, argv);
return 0;
}
但我一直遇到这个警告:
$ make ex14
cc -Wall -g ex14.c -o ex14
ex14.c: In function ?can_print_it?:
ex14.c:34:5: warning: array subscript has type ?char? [-Wchar-subscripts]
return isalpha(ch) || isblank(ch);
^
ex14.c:34:5: warning: array subscript has type ?char? [-Wchar-subscripts]
我尝试四处搜索,虽然我发现很多线程都在谈论类似的错误,但他们的答案/解决方案都没有在我的代码上起作用,而且我找不到与 Learn C 相关的问题艰难的路 exercise 14.
那么我应该怎么做才能摆脱这个警告呢?
【问题讨论】:
-
代码是否仍然有效?它发出警告,而不是错误......(顺便说一句,我很惊讶有一个“learn-c-the-hard-way”标签:)
-
@AjPerez,哇,我的错,它确实有效,但我仍然想摆脱那个警告
-
我不明白为什么编译器认为 char 索引很危险,但是你可以将
can_print_it(char ch);更改为can_print_it(int ch);来修复它。 -
@iharob 因为他们想要使用比可打印更严格的限制。名称不佳的
can_print_it的目标是排除除字母字符或空格之外的所有字符。标点符号、数字等都被排除在外,isprint不会出现。
标签: c