char * argv [] [英] 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屋!