c - 警告 : comparison is always true due to limited range of data type

标签 c

我正在测试这个应该从用户那里读取输入的函数,但它会抛出一个段错误

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

#define MAX_STRING_LENGTH 10

int 
readinput(char *input)
{
    int c;
    int i=0;
    while((c=getchar()) != EOF && c != '\n')  //Here is where the warning occurs.
    {
        input[i]=c;
        i++;
    }
    input[i]=0;
    if(strlen(input)>0)
    {
        if(isalpha(input[0]) && input[1]=='-' && isalpha(input[2]) && strlen(input)==3)
            return 0;
        else if(!strcmp(input, "quit"))
            return 1;
        else if(!strncmp(input, "save ", 5))
            return 2;
        else if(!strcmp(input, "undo"))
            return 3;
    }
    return -1;
}

int main()
{
   char *str;
   printf("write a string\n");
   int nr=readinput(str);
   printf("%d\n", nr);
   printf("%s\n", str);
   return 0;
}

我确实注意到了我犯的愚蠢错误,但仍然是段错误,为什么?

最佳答案

这是因为 EOF 被定义(在我的编译器中)为 -1 而 char 是无符号字节。所以它总是!=

关于c - 警告 : comparison is always true due to limited range of data type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13303528/

相关文章:

c - 在 C 中使用指针打印字符串

c# - 将 C DLL 导入 C# 程序的问题

c - 当一个对象需要修改另一个对象时的 OOP 最佳实践

javascript - 我们如何访问 Node.js 应用程序之外的内存?

C 编程结构作为转换传递给 char *?

c - 串行读取时丢失数据

c# - 将 char * 发送到字符串 c#

c - 打印 void* 类型的值

c - 在 Solaris 上编译 ruby​​ 1.9.3 时出错

c 中的字符和字符串与 strpbrk