0

我的班级有一项任务是编写一个基本的 C Shell。我发现许多页面解释了它的部分内容和一些完全实现的代码。我不打算复制,我现在只是将其用作入门的一种方式。

所以我显然是这个项目的开始。我正在查看的一个示例解析用户的输入并将指向参数开头的指针存储在char *argv[3];

我只是误解了这一点,或者如果有超过 3 个论点,这会在技术上中断吗?(说/a.out arg1 arg2 arg3等)。我想以某种方式 malloc 吗?

我知道 a.out 被考虑argv[0]过,而且论点argv[1]——不管有多少。一个程序有太多参数可能是不好的做法,但我仍然至少想解决它,因为我不知道我的助教将使用什么来测试我的 shell。

4

2 回答 2

0

这通常是您的用途argc;检查传递给程序的参数数量是否超过您的预期。

int main(int argc, char** argv) {
  if (argc > 4) { // arbitrary number used here
    fprintf(stderr, "Too many arguments!");
    exit(1);
  }
}
于 2013-11-10T23:23:29.917 回答
0

它可能会坏也可能不会坏,但它有问题。如果存在 >3 个参数,会发生什么情况,您将写入超过保留数组长度 3。即,一些参数将位于操作系统认为未分配的内存中,并且它可能会在那里分配其他对象。

应该检查 parse() 以查看是否存在超过 3 个参数,如果存在则停止解析并显示错误消息。

于 2013-11-10T23:25:25.437 回答