C 显示除第一个参数外的*argv

C 显示除第一个参数外的*argv,c,C,我是C新手,这里有一个简单的程序: #include <stdio.h> #define str char * int main(int k, const str argv[]) { while(* argv) puts(* argv ++); return 0; } #包括 #定义str字符* int main(int k,const str argv[]{ while(*argv)put(*argv++); 返回0; } 所以当我输入shell时,./myp

我是C新手,这里有一个简单的程序:

#include <stdio.h>
#define str char *

int main(int k, const str argv[]) {
    while(* argv) puts(* argv ++);
    return 0;
}
#包括
#定义str字符*
int main(int k,const str argv[]{
while(*argv)put(*argv++);
返回0;
}
所以当我输入shell时,./myprogrammsomeargotherarg

我得到:

我的计划 萨默格 其他人

我想做的是跳过第一个参数,并: 萨默格 其他人

重要的是我想保留*argv实现

我知道我可以这样做:

#include <stdio.h>
#define str char *

int main(int k, const str argv[]) {
    int i = 0;
    while(i<k-1){
        puts(argv[++i]) ;
    }

    return 0;

}
#包括
#定义str字符*
int main(int k,const str argv[]{
int i=0;

而(i您可以创建一个变量来检查您是否处于循环的第一次迭代中

int main(int k, const str argv[]) {
    int i = 0;
    while(*argv) {
        if (i != 0) puts(*argv++);
        i = 1;
    }
    return 0;
}

您可以创建一个变量来检查您是否在循环的第一次迭代中

int main(int k, const str argv[]) {
    int i = 0;
    while(*argv) {
        if (i != 0) puts(*argv++);
        i = 1;
    }
    return 0;
}

我测试了这个,它工作正常,没有seg故障

#include <stdio.h>
#define str char *
int main(int k, const str argv[]) {
    *argv++;
    while(* argv) puts(* argv ++);
    return 0;
}
#包括
#定义str字符*
int main(int k,const str argv[]{
*argv++;
while(*argv)put(*argv++);
返回0;
}

我测试了它,它工作正常。没有seg故障

#include <stdio.h>
#define str char *
int main(int k, const str argv[]) {
    *argv++;
    while(* argv) puts(* argv ++);
    return 0;
}
#包括
#定义str字符*
int main(int k,const str argv[]{
*argv++;
while(*argv)put(*argv++);
返回0;
}

要对第一个版本进行最微小的更改,您可以使用

while(*++argv) puts(*argv);

在主循环中。它会立即跳过参数“零”。(已测试)

对于第一个版本的最小更改,您可以使用

while(*++argv) puts(*argv);


在主循环中。它会立即跳过参数“零”。(已测试)

您不能执行*argv++;然后使用while循环吗?(跳过第一个值)不,我的数组将转到far,我将得到“分段错误”错误您不能执行*argv++;然后使用while循环吗?(跳过第一个值)不,我的数组将转到far,我将得到“分段错误”错误看起来我的解决方案保留了*argv,你没有看到任何其他的可能性吗?即使是脏的,也在处理*argv本身?类似*argv=null idk的东西…你猜这是为了练习..:)不,它会检查第一个参数,只有当它不是第一个参数时才会打印参数。alexander solution似乎是最好的,仍然支持你的建议。看起来我的解决方案保留了*argv,你没有看到任何其他的可能性吗?即使是脏的,处理*argv本身?类似*argv=null idk的东西…你猜它是用于练习p的吗不,它检查第一个参数,如果不是第一个参数,则只打印参数。alexander解决方案似乎是最好的,仍然支持您的建议。这是我用回归法写的,尽管如此,没有,但感谢您尝试帮助为纯代码答案添加解释通常会使它们对社区更有帮助这是我用一个回归函数写的,虽然没有,但感谢您尝试帮助添加一个解释,只对代码的答案通常会使它们对社区更有帮助。没有收到此错误:cx033.c:在函数“main”中:cx033.c:5:2:警告:未使用计算的值[-Wunused value]*argv++;^Ah,在这种情况下,Alexanders的答案是相同的,只是它不会抛出警告。(因为它在while循环中使用)在你提出之前,我试过你的代码,我有一个真正的错误,不仅仅是警告,我的意思是它不起作用,即使我确实有点不明白,似乎这不是相同的,只是把第一个
*argv++;
改成
argv++;
应该去掉警告…只是抱怨你取消了argv的引用,没有这样做任何结果…但增量是在
argv
,而不是
*argv
上。不获取此错误:cx033.c:在函数“main”中:cx033.c:5:2:警告:未使用计算值[-Wunused value]*argv++;^Ah,在这种情况下,Alexanders的答案是相同的,只是它不会抛出该警告。(因为它在while循环中使用)在你提出之前,我试过你的代码,我有一个真正的错误,不仅仅是警告,我的意思是它不起作用,即使我确实有点不明白,似乎这不是相同的,只是把第一个
*argv++;
改成
argv++;
应该去掉警告…只是抱怨你取消了argv的引用,没有这样做任何结果…但增量是在
argv
,而不是
*argv