编写基本的C Shell - 了解argv []

时间:2013-11-10 23:18:24

标签: c shell

我的班级编写基本C Shell的作业。我找到了很多页面来解释它的一部分和一些完全实现的代码。我不会复制,我现在只是使用它作为一种开始的方式。

所以我显然是在这个项目的开始。我正在查看一个example解析用户的输入并在char *argv[3];

中存储指向参数开头的指针

我只是误解了这一点,或者如果有超过3个参数,这技术会破坏吗? (比如/a.out arg1 arg2 arg3等)。我想以某种方式购买这个吗?

我知道a.out被认为是argv[0],而参数argv[1] - 无论多少都被认为是{{1}}。对于一个程序有太多的参数可能是不好的做法,但我仍然至少想要解决它,因为我不知道我的TA将用于测试我的shell。

2 个答案:

答案 0 :(得分:0)

这通常是您使用argc的内容;检查传递给程序的参数数量是否超出了您的预期。

int main(int argc, char** argv) {
  if (argc > 4) { // arbitrary number used here
    fprintf(stderr, "Too many arguments!");
    exit(1);
  }
}

答案 1 :(得分:0)

它可能会或可能不会中断,但它是错误的。如果存在> 3个参数,那么你将写入超过3的保留数组长度。一些参数将在内存中,操作系统认为是未分配的,并且可能在那里分配其他对象。

应该检查parse()以查看是否存在3个以上的参数,如果是,则停止使用错误消息进行解析。