鱼C论坛

 找回密码
 立即注册
查看: 1724|回复: 3

c++ main函数命令行参数问题, 求大神出山...

[复制链接]
发表于 2014-8-27 10:58:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int main(int argc,char **argv)
{
cout<<"argv=="<<argv<<endl;
    cout<<"*argv=="<<*argv<<endl;
    char opt;
    char **parg = argv;
    while(*parg != NULL)
    {
        cout<<"parg=="<<parg<<endl;
        cout<<"----parg=="<<*parg<<endl;
        while((opt = **parg) != *\0*)
        {
            cout<<"opt=="<<opt<<",";
            (*parg)++;
        }
        cout<<endl;
        parg++;
    }
    parg = NULL;
    cout<<"argv=="<<argv<<endl;
    cout<<"*argv=="<<*argv<<endl;
}


-----------------------------output:
leodemon@Leo-Linux:ubuntu_test_cpp$ ./testcpp TestTemp 123
argv==0x7fff5878edf8
*argv==./testcpp
parg==0x7fff5878edf8
----parg==./testcpp
opt==.,opt==/,opt==t,opt==e,opt==s,opt==t,opt==c,opt==p,opt==p,
parg==0x7fff5878ee00
----parg==TestTemp
opt==T,opt==e,opt==s,opt==t,opt==T,opt==e,opt==m,opt==p,
parg==0x7fff5878ee08
----parg==123
opt==1,opt==2,opt==3,
argv==0x7fff5878edf8
*argv==


~~~~~~~~~~~~~~~~~~~
为啥后面的argv地址没变,但就是没值呢,我哪里错了.......


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-27 17:05:01 | 显示全部楼层
while((opt = **parg) != *\0*)
         {
             cout<<"opt=="<<opt<<",";
             (*parg)++;
         }
你在这里改变了*parg的值,导致了argv数组中元素(char*)类型的值被改变(改变完所有的*parg的值都指向字符串结尾的'\0'元素),所以该循环结束后不能再次访问到argv中的字符数组。
你不应该直接修改*parg,而应该引入一个char*类型的变量,初始使它=*parg,然后修改它。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-28 10:28:00 | 显示全部楼层
仰望天上的光 发表于 2014-8-27 17:05
你在这里改变了*parg的值,导致了argv数组中元素(char*)类型的值被改变(改变完所有的*parg的值都指向字 ...

I get it. much appreciate !
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-28 10:44:54 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 21:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表