当我在没有任何输入的情况下运行此程序时,我的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;
}
}
答案 0 :(得分:7)
未定义未定义的行为。什么事情都可能发生。在这种情况下,您似乎正在运行argv
并进入main
的第三个(不太知名且肯定是非标准)参数,通常称为envp
。 Relevant 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”