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地址没变,但就是没值呢,我哪里错了.......
while((opt = **parg) != *\0*)
{
cout<<"opt=="<<opt<<",";
(*parg)++;
}
你在这里改变了*parg的值,导致了argv数组中元素(char*)类型的值被改变(改变完所有的*parg的值都指向字符串结尾的'\0'元素),所以该循环结束后不能再次访问到argv中的字符数组。
你不应该直接修改*parg,而应该引入一个char*类型的变量,初始使它=*parg,然后修改它。 仰望天上的光 发表于 2014-8-27 17:05
你在这里改变了*parg的值,导致了argv数组中元素(char*)类型的值被改变(改变完所有的*parg的值都指向字 ...
I get it. much appreciate ! {:1_1:}
页:
[1]