LeoDemon 发表于 2014-8-27 10:58:17

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

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地址没变,但就是没值呢,我哪里错了.......


仰望天上的光 发表于 2014-8-27 17:05:01

while((opt = **parg) != *\0*)
         {
             cout<<"opt=="<<opt<<",";
             (*parg)++;
         }
你在这里改变了*parg的值,导致了argv数组中元素(char*)类型的值被改变(改变完所有的*parg的值都指向字符串结尾的'\0'元素),所以该循环结束后不能再次访问到argv中的字符数组。
你不应该直接修改*parg,而应该引入一个char*类型的变量,初始使它=*parg,然后修改它。

LeoDemon 发表于 2014-8-28 10:28:00

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

I get it. much appreciate !

灵竹子 发表于 2014-8-28 10:44:54

{:1_1:}
页: [1]
查看完整版本: c++ main函数命令行参数问题, 求大神出山...