免费注册 查看新帖 |

Chinaunix

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

[函数] 调用main函数,打印入参argv coredump! 各位帮忙看看 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-11 11:41 |只看该作者 |倒序浏览

  1. void testmain()
  2. {
  3.         char argv[10][40];
  4.         memset(argv,0,sizeof(argv));
  5.         strcpy(argv[0],"4444");
  6.         strcpy(argv[1],"5555");
  7.         sleep(3);       
  8.         printf("------\n");
  9.         main(2,argv);
  10.         return;
  11. }
  12. int main(int argc, char **argv)
  13. {       
  14.                 int i;
  15.                 printf("======%d  argv=%p\n",argc,argv);               
  16.                
  17.                 for(i=0;i<argc;i++)
  18.                 {
  19.                         printf("argv[%d]=%s\n",i,argv[i]);
  20.                 }
  21.                 testmain();
  22.                
  23.                 return(0);
  24. }
复制代码

把for循环去掉是可以运行的,不知道是哪里的问题。

[ 本帖最后由 高峰 于 2007-4-11 11:43 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-04-11 11:46 |只看该作者
不是无限递归吗?

论坛徽章:
0
3 [报告]
发表于 2007-04-11 11:49 |只看该作者
原帖由 高峰 于 2007-4-11 11:41 发表

  1. void testmain()
  2. {...
  3.         main(2,argv);
  4. ...
复制代码



太狠了吧???

论坛徽章:
0
4 [报告]
发表于 2007-04-11 11:51 |只看该作者
是递归啊,终止条件还没有设置,再帮看看

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2007-04-11 12:02 |只看该作者
楼主把最基本的概念都没搞清楚。

main 的参数是一个一维数组,它的每个元素是一个 char * 类型。
你传递给它的却是一个一维数组,每个元素是一个 char 类型。不要争辩说你传的 argv 是个二维数组 —— 那没用,你进行函数调用时,所有的数组都被理解成一维数组,事实上 C 里面根本没有二维数组这个概念。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2007-04-11 12:04 |只看该作者
简而言之,就是
char *argv[]

char argv[][]
的区别。
前者 argv[0] 的类型是 char *,后者 argv[0] 的类型是 char []

论坛徽章:
0
7 [报告]
发表于 2007-04-11 12:10 |只看该作者
void testmain()
{
        char **argv;
        argv=(char **)malloc(...)
argv[0]=(char *)malloc...
argv[1]=(char *)malloc...

        strcpy(argv[0],"4444");
        strcpy(argv[1],"5555");
        sleep(3);      
        printf("------\n");
        main(2,argv);
        return;
}

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2007-04-11 12:11 |只看该作者
原帖由 connet 于 2007-4-11 12:10 发表
void testmain()
{
        char **argv;
        argv=(char **)malloc(...)
argv[0]=(char *)malloc...
argv[1]=(char *)malloc...

        strcpy(argv[0],"4444");
        strcpy(argv[1 ...

不用那么复杂,
只需要
  1. char *argv[2];
  2. argv[0] = "4444";
  3. argv[1] = "5555";
复制代码

就可以了。

论坛徽章:
0
9 [报告]
发表于 2007-04-11 12:47 |只看该作者
多谢flw的指点,佩服佩服!
我的确忽略了这个问题。

论坛徽章:
0
10 [报告]
发表于 2007-04-11 14:06 |只看该作者
此帖有保留价值
char [][]和char **的故事
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP