【问题标题】:How to compare pointer to an ascii character?如何将指针与ASCII字符进行比较?
【发布时间】:2019-07-07 17:25:36
【问题描述】:

我正在尝试编写一个函数来检查是否所有括号都从命令行参数关闭(打开和关闭的数量相等)。 它是检查可接受的输入。 ./main ( 10 + 10 ) 之间有空格,因此每个括号都是命令行中自己的标记。这是为了确保命令行参数看起来不像 ./main ( 10 + 10

我尝试将 '(' 更改为 40 和 ')' 更改为 41。我尝试使用 argv[i] 而不是 *(argv + i) 但我对指针没有很多经验。 (我来自 Java 背景)。

int main (int argc, char **argv) {

  int i;
  char *outputBase;
  char *helpFlag;
  char **equation;

  equation = NULL;
  /*check for validity of inputs*/
  if (checkAmtArgs(argc) == false || checkParens(argc, argv) == false) {
    exit(EXIT_FAILURE);
  }

  for (i = 1; i < argc; i++) {
    if (isNumber(argv[i])){
      strcat(*equation, *(argv + i));
    } else if (isOperator(argv[i])) {
      strcat(*equation, *(argv + i));
    } else if (isBase(argv[i])) {
      outputBase = argv[i];
    } else if (isFlag(argv[i])) {
      helpFlag = argv[i];
    } else {
      printf("%s\n", "Exiting program");
      exit(EXIT_FAILURE);
    }
  }

  return 0;
}

/*check for valid number of parantheses*/
int checkParens(int argc, char **argv) {
  int i;
  int result;

  int openParen;
  int closeParen;

  openParen = 0;
  closeParen = 0;

  for (i = 0; i < argc; i++) {
    if (*(argv + i) == '(' ) {
      openParen++;
    } else if (*(argv + i) == ')' ){
      closeParen++;
    }
  }

  if (openParen != closeParen) {
    result = false;
    printError(errorNum, 10);
  } else {
    result = true;
  }

  return result;
}
main.c: In function ‘checkParens’:
main.c:67:21: warning: comparison between pointer and integer
     if (*(argv + i) == '(' ) {
                     ^~
main.c:69:28: warning: comparison between pointer and integer
     } else if (*(argv + i) == ')' ){

【问题讨论】:

  • argv 是字符串列表,而不是字符列表。
  • 我能做 argv[i][0] 吗?
  • 由于显示的函数是not main(),请问你给checkParens()传递了什么,它是如何定义和初始化/设置的?
  • 就目前而言,这个问题可能被认为是不完整的。
  • 这应该在unix系统上吗?我很确定 shell 会在命令行上抱怨 ( )

标签: c pointers command-line


【解决方案1】:

您必须使用 **(argv + i) 即两个星号,因为您创建了指向指针的指针。

【讨论】:

  • @Fragile 我试过你的代码。您需要使用两个星号来尊重这些值。你现在遇到什么错误?
  • 那行得通。也许我现在只需要用命令行来测试它。
  • 你可以尝试为新的命令行问题发布一个新问题。
  • 我没有投反对票。事实上,我没有 15 个代表,所以我不能赞成或反对哈哈。编辑(刚刚获得 15 个代表感谢社区!)
  • 我认为这很好,因为假设每个括号都作为自己的标记输入(即括号和下一个参数之间有一个空格)我为用户指定了这个程序没有进行彻底的输入检查。所以每个都是它自己的 arg 对还是在 0 点?
猜你喜欢
  • 2022-11-03
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多