【问题标题】:Using * in string compare?在字符串比较中使用*?
【发布时间】:2020-05-24 02:30:29
【问题描述】:

在我的 C 程序中比较字符串时使用“*”时遇到问题。是否有禁止使用它的规则?这是一段麻烦的代码:

else if(strcmp(argv[i], "*") == 0)
{
    printf("pos MULT: %d", pos);
    result = dubStack[pos-1] * dubStack[pos - 2];
    pos += 1;
}

当使用上面的代码运行程序时,我的打印语句不运行并且不计算结果。 但是,如果我更改字符串比较中的字符(如下所示;将 * 更改为 m),则会执行正确的操作并且打印语句可以正常工作。使用 * 时有什么遗漏吗?

else if(strcmp(argv[i], "m") == 0)
{
    printf("pos MULT: %d", pos);
    result = dubStack[pos-1] * dubStack[pos - 2];
    pos += 1;
}

【问题讨论】:

  • 也许符号'*'在使用过的shell中有特殊含义。
  • 用调试器检查argv[i] 的值(或打印它),正如弗拉德所说,你的外壳可能已经替换它
  • 这能回答你的问题吗? Unable to pass '#' character as a command-line argument(字符不同,shell 有同样的问题)
  • 是的,你的程序很好;你的壳在拧你。如何解决?你不能。这是很久以前做出的 Unix 基本设计决策,恕我直言,这是错误的,无法更改。

标签: c string if-statement command compare


【解决方案1】:

* 在 C 字符串中没有什么特别之处:"*" 是一个长度为 1 的无害字符串。

相反,* 被命令外壳扩展为当前目录中文件和目录名称的排序列表。为防止这种情况,您必须在命令行中引用此字符。以下是执行此操作的不同方法:

$ myprog 1 1 \*
$ myprog 1 1 '*'
$ myprog 1 1 "*"

【讨论】:

    猜你喜欢
    • 2017-03-28
    • 1970-01-01
    • 2016-07-21
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    相关资源
    最近更新 更多