C简单的数组访问比较

时间:2010-09-28 17:51:55

标签: c arrays character

int isEmpty(char x [1000]){
    int i = 0;

    while( x[i] == " " || x[i] == "/t" || x[i] == ""){
        i++;
    }

    if (i != 999)
        return 1;
    }

    return 0;
}

我收到的错误:

警告:指针和整数之间的比较

警告:与字符串文字进行比较会导致未指定的行为

我意识到我的代码读取的内容与Java类似,我还没有完全掌握C语法。

5 个答案:

答案 0 :(得分:5)

问题是您使用字符串文字表达char值。不要使用双引号"包围它们,而是使用单引号'

while( x[i] == ' ' || x[i] == '\t' ) {

其他一些问题。

  • 您可能意味着\t而不是/t。前者是制表符,后者是两个字符
  • 不确定您使用""尝试了什么。也许是\0

答案 1 :(得分:2)

由于您要与字符常量进行比较,因此您需要使用单引号而不是双引号:

x[i] == ' '

双引号用于"foo"等字符串常量。所以"\n"是一个带有单个char的字符串文字,'\n'是一个char常量。

答案 2 :(得分:0)

  1. 字符应括在' '(单引号)中。
  2. 这是\t&标签字符不是/t
  3. 使用空白字符串""删除案例(相当于NULL)。

答案 3 :(得分:0)

除了之前的答案,我认为

  1. 如果在NULL (\0)中找到x,检查是否会继续?我认为答案可能是:
  2. 最好将空字符的检测逻辑与空字符串
  3. 的逻辑分开
  4. (i != 999)部分不清楚。不是(i == 1000)吗?
  5. OP的代码中有无与伦比的括号。
  6. 这是我的版本:

    /* return 1 when c is considered empty, 0 otherwise */
    int isEmptyChar( const char c ) {
        return c == ' ' || c == '\t';
    }
    
    enum { N = 1000 };
    
    /* return 1 when x is considered empty, 0 otherwise */
    int isEmptyString( const char x[ N ] ) {
        for( int i = 0; i < N; i++ ) {
            if( x[ i ] == '\0' ) {
                break;      /* stop, if NUL termination is found */
            }
            if( ! isEmptyChar( x[ i ] ) ) {
                return 0;   /* early return if non-empty char is found */
            }
        }
        return 1;
    }
    

答案 4 :(得分:0)

int isEmpty(const char *x)
{
  return EOF==sscanf(x,"%*s");
}

也应该做你想要的,是C89并为你测试空白。