【问题标题】:segmentation fault and argv, argc分段错误和 argv、argc
【发布时间】:2015-04-29 16:08:16
【问题描述】:

我编写了一个打印输入的代码:

  int main(int argc, char *argv[])
{
    printf("%c", *argv[1]);
    return 0;
}

当我输入ababcdefac*cf 时,它运行良好,但是当我输入 **$$ 时它返回 2,当我输入 $a 时, $k 等等,会产生分段错误。我想知道为什么它不打印出我输入的字母。

【问题讨论】:

  • *$ 甚至在您的程序被调用之前就由 shell 处理。您可能会考虑将 RTFM 用于shkshcshbashdash 或您正在使用的任何 shell。
  • 也打印argc,然后检查打印argv[1]是否合法。
  • "当我输入 '*' 或 '$$'"* 你如何"put"?如果它是真正的命令行,也许你应该尝试看看 '**''$$' 是什么意思。例如尝试echo **echo $$
  • 在调试器中运行,当崩溃发生时看看argcargv[1]的值是什么。
  • 尝试将这些参数用双引号括起来

标签: c segmentation-fault command-line-arguments


【解决方案1】:

假设您运行的是 Linux 或其他类型的 UNIX,$a 指的是环境变量 a。这是由您的外壳扩展的,并且由于您没有将其设置为一个值,因此它变为空。

要获得文字字符串 $a,您必须转义您的参数 - 根据您使用的 shell,您可以尝试使用单引号或双引号,或者使用反斜杠 \ 转义 $

【讨论】:

    【解决方案2】:

    我假设您使用 Linux/Unix/MacO。尝试使用 echo $$ 或 echo $1,而不是运行您的程序。这些系统变量被扩展为其他字符串(或根本不扩展)。因此,当没有文本时,您会得到扩展文本或分段错误。

    【讨论】:

      猜你喜欢
      • 2011-04-15
      • 2012-04-20
      • 2020-11-03
      • 2013-09-08
      • 2013-05-27
      • 2015-03-27
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多