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

时间:2015-01-28 02:15:15

标签: c

当我在没有任何输入的情况下运行此程序时,我的argv [2]得到了一个奇怪的字符串。为什么没有#argv [2]未定义? TERM_PROGRAM=Apple_T< - 这就是我得到的。我想知道这是否与在Mac上运行它有关?

if(argv[2]) {
    sscanf(argv[2], "%lf", &argWind);
    sscanf(argv[2], "%20s",  str);
    sprintf(str2, "%lf", argWind);
    printf("String: %s, %lf", str, argWind);
    int len;
    len = strlen(str);
    str2[len] = '\0';

    if(strcmp(str, str2)){
        printf("\nError: you entered a non-numeric entry for wind speed\n");
        return 0;
    }
} 

3 个答案:

答案 0 :(得分:7)

未定义未定义的行为。什么事情都可能发生。在这种情况下,您似乎正在运行argv并进入main的第三个(不太知名且肯定是非标准)参数,通常称为envpRelevant link

答案 1 :(得分:1)

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;
}

查看流程:

F:\so>tcc test.c

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

test.exe是第一个,a是第二个,b是第三个,c是第四个。 如果你运行test.exe whitout其他参数,它会说argv [2]意味着b这里没有定义。

答案 2 :(得分:1)

你最好首先检查“argc”,然后你可以选择使用有效的“argv”