【发布时间】:2015-10-14 19:23:01
【问题描述】:
全局使用argv 指针是否安全?还是有可能失效的情况?
即:这段代码安全吗?
char **largs;
void function_1()
{
printf("Argument 1: %s\r\n",largs[1]);
}
int main(int argc,char **argv)
{
largs = argv;
function_1();
return 1;
}
【问题讨论】:
-
不,代码不保存。该程序可以不带参数调用,因此只有 argv[0] 或 args[0] 会包含一个字符串。
-
@manni66:很好的观察,虽然不是问题的重点:但你可以用
if (largs[0] && largs[1])之类的东西来解决它。 -
@NateEldredge:是什么让你认为
largs[1]如果argc==1会为空? OP 只需要创建一个全局int largsc;并在 main() 中分配它largsc = argc,就像他为largs所做的那样。那么function_1()不仅可以访问程序的argv,还可以访问它的argc。 -
@phonetagger: C89 2.1.2.2,就是这样。 (或 C99 5.1.2.2.1。)“
argv[argc]应为空指针。”当然,您也可以按照您的建议进行操作,但利用argv保证为空终止这一事实通常很方便。 -
@NateEldredge:哎呀,好痛! :) 我从来不知道。如果我有的话,多年来这可能会简化一些事情。感谢您的信息。