char * argv [] [英] char* argv[]

查看:53
本文介绍了char * argv []的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么(I)有效但(II)给出分段错误?


(I)

int main(int argc,char * argv [] ){

printf("%s",argv [0]);

}


(II)

int main(int argc,char * argv){

printf("%s",argv [0]);

}

Why (I) works but (II) gives segmentation error?

(I)
int main(int argc, char *argv[]) {
printf("%s", argv[0]);
}

(II)
int main(int argc, char *argv) {
printf("%s", argv[0]);
}

推荐答案

Logan说:
Logan said:

为什么(I)有效但(II)给出了分段错误?


(I)

int main(int argc,char * argv []){

printf("%) s",argv [0]);

}


(II)

int main(int argc,char * argv ){

printf("%s",argv [0]);

}
Why (I) works but (II) gives segmentation error?

(I)
int main(int argc, char *argv[]) {
printf("%s", argv[0]);
}

(II)
int main(int argc, char *argv) {
printf("%s", argv[0]);
}



两个程序的行为都是未定义的,因为你在printf的范围内没有

原型,这是一个可变函数。


第一个程序否则是正确的(虽然不稳健,因为它b / b
假设t hat argc至少是1),虽然添加一个带有

的返回语句,但是合适的返回值是明智的。


第二个程序错误地描述了第二个参数主要的。

两种正确的主要形式是:


int main(void)/ *或任何精确的语义等价物* /

int main(int argc,char ** argv)/ *或任何精确的语义等价物* /


你的第二个程序认为argv是一个字符串,它不是。


-

Richard Heathfield< http://www.cpax.org.uk>

电子邮件:-http:/ /万维网。 + rjh @

谷歌用户:< http://www.cpax.org.uk/prg/writings/googly.php>

Usenet是一个奇怪的放置" - dmr 1999年7月29日

The behaviour of both programs is undefined, because you don''t have a
prototype in scope for printf, which is a variadic function.

The first program is otherwise correct (although non-robust, since it
assumes that argc is at least 1), although adding a return statement with
an appropriate return value would be wise.

The second program incorrectly describes the second parameter of main. The
two correct forms of main are:

int main(void) /* or any exact semantic equivalent */
int main(int argc, char **argv) /* or any exact semantic equivalent */

Your second program thinks argv is a string, which it isn''t.

--
Richard Heathfield <http://www.cpax.org.uk>
Email: -http://www. +rjh@
Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
"Usenet is a strange place" - dmr 29 July 1999


星期五,2007年12月14日23:30:39 +0000 ??,Richard Heathfield?è?''?'ù:
Fri, 14 Dec 2007 23:30:39 +0000??, Richard Heathfield ?è?à′?′ù:

Logan说:
Logan said:

>为什么(I)有效,但(II)给出了分段错误?

(I)
int main(int argc,char * argv []){
printf("%s",argv [0]);
}

(II)
int main(int argc,char * argv){
printf("%s",argv [0]);
}
>Why (I) works but (II) gives segmentation error?

(I)
int main(int argc, char *argv[]) {
printf("%s", argv[0]);
}

(II)
int main(int argc, char *argv) {
printf("%s", argv[0]);
}



两个程序的行为都是未定义的,因为你在printf的范围内没有

原型,这是一个可变函数。 />

第一个程序是正确的(尽管它不健壮,因为它是b / b
假定argc至少为1),尽管添加了一个带有

合适的返回值是明智的。


第二个程序错误地描述了main的第二个参数。

两种正确的主要形式是:


int main(void)/ *或任何精确的语义等价物* /

int main(int argc,char ** argv)/ *或任何精确的语义等价物* /


你的第二个程序认为argv是一个字符串,它不是。


The behaviour of both programs is undefined, because you don''t have a
prototype in scope for printf, which is a variadic function.

The first program is otherwise correct (although non-robust, since it
assumes that argc is at least 1), although adding a return statement with
an appropriate return value would be wise.

The second program incorrectly describes the second parameter of main. The
two correct forms of main are:

int main(void) /* or any exact semantic equivalent */
int main(int argc, char **argv) /* or any exact semantic equivalent */

Your second program thinks argv is a string, which it isn''t.



char ** argv等于char * argv []?

Is char **argv equal to char *argv[]?


Logan说:


< snip>
Logan said:

<snip>

char ** argv是否等于char * argv []?
Is char **argv equal to char *argv[]?



在这种情况下(函数声明中的形式参数),是的,它们

是等价的。


-

Richard Heathfield< http://www.cpax.org.uk>

电子邮件:-http:// www。 + rjh @

谷歌用户:< http://www.cpax.org.uk/prg/writings/googly.php>

Usenet是一个奇怪的放置" - dmr 1999年7月29日

In this context (formal parameters in a function declaration), yes, they
are equivalent.

--
Richard Heathfield <http://www.cpax.org.uk>
Email: -http://www. +rjh@
Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
"Usenet is a strange place" - dmr 29 July 1999


这篇关于char * argv []的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆