【问题标题】:error: comparision between pointer and integer错误:指针和整数之间的比较
【发布时间】:2015-02-15 21:52:07
【问题描述】:
#include<stdio.h>
#include<string.h>
int main(int argc,char *argv[])
{
char c;
char a[19][100];
int i=0;
int j=0;

while((c=fgetc(stdin))!=EOF)
{
  if(c!=" ")
  {
    a[i][j]=c;
    j++;
   }
   if(c==" "||c=='\n')
{
   a[i][j]='\0';
   i++;
   j=0;
    }
 }
 for(j=0;j<i;j++)
printf("%s \n",a[j]);
}

我得到的错误是

   15.c:12:5: warning: comparison between pointer and integer[enabled       by   default]

 if(c!=" ")
     ^

15.c:17:5: warning: comparison between pointer and integer [enabled by   default]

if(c==" "||c=='\n')

【问题讨论】:

  • " " 用于字符串(即char *)。将' ' 用于char
  • 你没有看到" "'\n'之间的不一致吗?
  • 注意到了,感谢您的帮助
  • 相关stackoverflow.com/q/13041701/694576。由于没有提到 EOF 问题,我不认为它是真正的重复。
  • c 应该是 int 如果你想正确处理 EOF 大小写。

标签: c


【解决方案1】:

c 被定义为char" " 是一个“字符串”字面量,在C 中它被实现为chars 的数组,它又衰减为指向它的第一个元素的指针,即char *

要解决此问题,请将 cchar 进行比较。

if (c != ' ')  /* Use ' to code a char literal, use " to code a string literal. "/

此外,当您将fgetc() 的结果分配给c 并针对EOF(通常为-1)测试c 时,将c 设为int,即设为@ 类型987654337@返回。

【讨论】:

    【解决方案2】:

    您将charchar * 进行比较。你不能这样做,将c设置为signed char,因为它需要存储EOF。这取决于编译器是否charsignedunsigned,所以你无法知道。 它需要是这样的:

    if(c!= ' ')
      {
        a[i][j]=c;
        j++;
       }
    

    【讨论】:

    • signed char 用于c 会使程序在读取0xff 时失败。
    • 我写文本,现在如果 OP 用户阅读它,用户将去查看已签名和未签名的内容,以及两者的范围。我认为他/她需要 char 用于范围
    • 使用 signed char 将适用于 256 个可能的字符中的 255 个。值为0xff 的角色将失败。使用 int 它将适用于 所有 个字符,即 256 个字符中的 256 个字符。
    • 你说得对。我只是为有符号变量 OP 用户编写示例,以了解有符号和无符号,以使他可以仅使用 CHAR 来处理 EOF ,但不要让编译器选择它是有符号的还是无符号的。
    • @alk 为什么 OP 需要 0xff ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多