免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4985 | 回复: 10
打印 上一主题 下一主题

[C] c程序在什么情况下argc=0 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-22 18:44 |只看该作者 |倒序浏览
或者argv[0]="";
人工修改的不算

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
2 [报告]
发表于 2013-05-22 19:20 |只看该作者
argc=0:
  1. execlp("./test", (char*)0);
复制代码
argv[0]="":
  1. execlp("./test", "", (char*)0);
复制代码

论坛徽章:
0
3 [报告]
发表于 2013-05-23 10:52 |只看该作者
#include<stdio.h>
#include<unistd.h>
int main(int argc,char *argv[])
{
execlp("ls a",(char *)0);
printf("%d\n",argc);
}

[oracle@redflag11012501 ~]$ gcc argc.c
[oracle@redflag11012501 ~]$ ./a.out
1

论坛徽章:
0
4 [报告]
发表于 2013-05-23 10:57 |只看该作者
这个可以为零吗?至少也得是1吧

论坛徽章:
0
5 [报告]
发表于 2013-05-23 11:00 |只看该作者
#include<stdio.h>
#include<unistd.h>
int main(int argc,char *argv[])
{
execlp("ls a","",(char *)0);
printf("%s\n",argv[0]);
}
[oracle@redflag11012501 ~]$ gcc argc.c
[oracle@redflag11012501 ~]$ ./a.out
./a.out

论坛徽章:
0
6 [报告]
发表于 2013-05-23 11:02 |只看该作者
如果改成
#include<stdio.h>
#include<unistd.h>
int main(int argc,char *argv[])
{
execlp("./a.out","",(char *)0);
printf("%s\n",argv[0]);
}

就挂起了

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
7 [报告]
发表于 2013-05-23 11:28 |只看该作者
楼上都搞笑的吧,  ls -a能执行? -a是命令行参数, ls才是程序, execlp返回-1了还看啥? /bin/bash -c command才是你想要的吧.

A NULL argv[0] was passed through an exec system call.

不传第0个参数会core掉, 系统不让.

论坛徽章:
0
8 [报告]
发表于 2013-05-23 16:31 |只看该作者
改成who了,还是不对
#include<stdio.h>
#include<unistd.h>
int main(int argc,char *argv[])
{
execlp("who",(char *)0);
printf("argv[0]=\"%s\"\n",argv[0]);
}
[oracle@redflag11012501 ~]$ gcc argc.c
[oracle@redflag11012501 ~]$ ./a.out
oracle   pts/0        2013-05-23 16:05 (10.6.132.43)

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
9 [报告]
发表于 2013-05-23 21:20 |只看该作者
回复 3# 〇〇
是test程序的argc和argv,而不是调用execlp的程序的argc和argv。
你好像不知道execlp是做什么的?调用execlp后,后面的代码不会执行了。

   

论坛徽章:
0
10 [报告]
发表于 2013-05-24 09:19 |只看该作者
井蛙夏虫 发表于 2013-05-23 21:20
回复 3# 〇〇
是test程序的argc和argv,而不是调用execlp的程序的argc和argv。
你好像不知道execlp是做什 ...

谢谢指导

[oracle@redflag11012501 ~]$ vi aa.c
#include<stdio.h>
int main(int argc,char *argv[])
{
printf("argc=\"%d\"\n",argc);
printf("argv[0]=\"%s\"\n",argv[0]);
}


"aa.c" [新] 6L, 120C 已写入  
[oracle@redflag11012501 ~]$ gcc aa.c
[oracle@redflag11012501 ~]$ ./a.out
argc="1"
argv[0]="./a.out"
[oracle@redflag11012501 ~]$ mv a.out a
[oracle@redflag11012501 ~]$ vi bb.c
#include<unistd.h>
int main()
{
execlp("./a",(char *)0);
}


"bb.c" [新] 5L, 59C 已写入  
[oracle@redflag11012501 ~]$ gcc bb.c
[oracle@redflag11012501 ~]$ ./a.out
argc="0"
argv[0]="(null)"
[oracle@redflag11012501 ~]$

[oracle@redflag11012501 ~]$ vi bb.c
#include<unistd.h>
int main()
{
execlp("./a","",(char *)0);
}

"bb.c" 5L, 62C 已写入  
[oracle@redflag11012501 ~]$ gcc bb.c
[oracle@redflag11012501 ~]$ ./a.out
argc="1"
argv[0]=""
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP