'!'在输入缓冲区中,在if语句中进行比较

时间:2018-08-30 06:03:20

标签: c string gcc char

我不清楚下面的示例代码在输入缓冲区比较中使用!的情况

/*GLOBAL VARIABLES*/
int pipe_count=0, fd;
static char* args[512];
char *history_file;
char input_buffer[1024];

int main()
{
    int status;
    char ch[2]={"\n"};
    getcwd(current_directory, sizeof(current_directory));
    signal(SIGINT, sigintHandler);
   while (1)
    {
      clear_variables();
      prompt();
      fgets(input_buffer, 1024, stdin);
      if(strcmp(input_buffer, ch)==0)
            {
              continue;
            }
      if(input_buffer[0]!='!')
            {
                fileprocess();
                filewrite();
            }
      len = strlen(input_buffer);
      input_buffer[len-1]='\0';
      strcpy(his_var, input_buffer);
      if(strcmp(input_buffer, "exit") == 0)
            {
              flag = 1;
              break;
            }

我听不懂if(input_buffer[0]!='!')

在此陈述中,'!'的含义是表示NULL 或其他的东西。完整的代码非常大,这只是我不清楚的一部分。

我从here检查了!的ASCII值,但是我无法理解在代码{{中使用input_buffer[0] 1}}等,据我所知是!NULLNULL。对我来说,这种'\0'的东西还不清楚吗?

我不是在这里向操作员不等于询问,即' '我知道它是如何工作的。但是在 condition2 中有input_buffer[0]!='!',这就是我要问的。这意味着什么?

3 个答案:

答案 0 :(得分:0)

它不仅是!,而且是!=,被称为不等于运算符。 顾名思义,它与==运算符相反。

在您的情况下,if(input_buffer[0]!='!')如果if不等于 true,则input_buffer[0]语句将为'!'

第二次出现表示字符'!',其ASCII值为33。

在您的示例中,它表示处理和写入文件的触发器。只有当缓冲区中的第一个字符不是'!'时,处理才会发生。

答案 1 :(得分:0)

在Linux中!运算符有许多用途。 参见此article

在您的情况下,可能要检查历史记录中的a命令是否作为输入给出。 请参阅本文的第一点。

答案 2 :(得分:0)

与外观完全一样-文字!。如果该行以!以外的任何内容开头,则作者想做

fileprocess();
filewrite();

也许以感叹号开头的“命令”之间是有区别的(它们是注释或类似的东西?或者,如果这是某种形式的外壳,它会做一些不同的事情-例如不更新历史记录- it may be related to history expansion?)以及所有其他内容?如果不看其余的代码,也不了解上下文,很难说。