C 作业:为什么定义argv[2]?

C 作业:为什么定义argv[2]?,c,C,当我在没有任何输入的情况下运行这个程序时,我的argv[2]得到了一个奇怪的字符串。为什么argv[2]没有定义?TERM_PROGRAM=Apple_T未定义的行为是未定义的。任何事情都有可能发生。在本例中,看起来您正在运行argv,进入main的第三个不太为人所知的非标准参数,通常称为envp argv[2]是命令行的第三个参数,与此代码类似,argc是参数的数量: int main(int argc, char const *argv[]) { int i = 0; for (;

当我在没有任何输入的情况下运行这个程序时,我的argv[2]得到了一个奇怪的字符串。为什么argv[2]没有定义?TERM_PROGRAM=Apple_T未定义的行为是未定义的。任何事情都有可能发生。在本例中,看起来您正在运行argv,进入main的第三个不太为人所知的非标准参数,通常称为envp

argv[2]是命令行的第三个参数,与此代码类似,argc是参数的数量:

int main(int argc, char const *argv[])
{
  int i = 0;
  for (; i < argc; ++i)
  {
     printf("%d -> %s\n", i, argv[i]); 
  }
  return 0;
}
test.exe是第一个,a是第二个,b是第三个,c是第四个。
如果在没有其他参数的情况下运行test.exe,则会显示argv[2]表示此处未定义b。

您最好先检查argc,然后可以选择使用有效的argv

可能是因为您在mac上。您应该能够测试lensys.argv以获得传递的参数数,如果您没有第二个参数,那么它应该为空。。。可能它正在读取NULLPTR。您必须使用argc来确定argv[]的哪些元素是有效的。argv[]中除argc-1之外的索引处的任何内容都只是内存中碰巧存在的内容。argc告诉您argv[]中有多少元素是有效的。请注意,命令名本身在argv[0]中。这就是它的工作原理。它与Mac无关。当我在没有参数的情况下运行它时会发生这种情况。argv只是定义为一个数组。您有责任检查argc中该数组中的元素数量,并且不能超过它们。argv是基于零的,因此如果argc==2,则argv的可用元素是0和1。如果访问argv[2],您将通过数组的末尾访问随机未初始化的内存,结果是未定义的
int main(int argc, char const *argv[])
{
  int i = 0;
  for (; i < argc; ++i)
  {
     printf("%d -> %s\n", i, argv[i]); 
  }
  return 0;
}
F:\so>tcc test.c

F:\so>test.exe a b c
0 -> test.exe
1 -> a
2 -> b
3 -> c