我正在编写一个简单的程序,它从用户那里获取参数并处理它们.我在argv中的参数是二维数组.但是当我运行程序时,我得到垃圾值和分段错误错误.我已经尝试使用argc作为终止条件并且它有效.但我想只使用指针.指针在这里做错了什么.
#include<stdio.h>
int main( int argc, char *argv[])
{
while (++(*argv))
{
if ( **argv == '-' )
{
switch (*argv[1])
{
default:
printf("Unknown option -%c\n\n", (*argv)[1]);
break;
case 'h':
printf("\n option h is found");
break;
case 'v':
printf("option V is found");
break;
case 'd':
printf("\n option d is found");
break;
}
}
printf("\n outside while : %s", *argv);
}
}
Run Code Online (Sandbox Code Playgroud)
程序运行方式:
./a.out -h -v -d
Run Code Online (Sandbox Code Playgroud)
谢谢
如果你想迭代遍历程序参数寻找终止空指针,你的外部循环应该是
while (*++argv)
Run Code Online (Sandbox Code Playgroud)
不是
while (++*argv) // <- incorrect!
Run Code Online (Sandbox Code Playgroud)
你的代码中有.
你的switch表达写得不正确.虽然您的意图很明确,但您的实现会忽略运算符优先级.
这个
switch (*argv[1]) { // <- incorrect!
Run Code Online (Sandbox Code Playgroud)
应该是
switch ((*argv)[1]) {
Run Code Online (Sandbox Code Playgroud)以前的 if
if (**argv == '-')
Run Code Online (Sandbox Code Playgroud)
很好,但因为它相当于
if ((*argv)[0] == '-') // <- better
Run Code Online (Sandbox Code Playgroud)
也许你应该以这种方式重写它,只是为了与之保持一致switch.