我对argv指针有些困难。使用* argv [1]给出了argc计数和* argv [2]整个参数。当取消引用时,不应该给每个元素一个字符吗?
由于
int main(int argc,char *argv[])
{
char store[10]={0,0,0,0,0,0,0,0,0,0};int freq[10]={0,0,0,0,0,0,0,0,0,0};int flag=0;int count=0;int t;
for(int i=0,j=0;i<argc;i++)
{
for(int z=0;z<count;z++)
{
if(i==0) break;
if(*argv[i+2]==store[z]) flag=1;t=z;break;
}
if(flag==0||i==0) {store[j]=*argv[i+2];j++; count++;}
else freq[t]+=1;
flag=0;
}
for(int x=0;x<count;x++) cout<<store[x]<<"\t"<<freq[x]<<endl;
}
答案 0 :(得分:0)
当*argv[i+2]
到达i
时,您在argc-2
处获得了段错误,因为那时您将访问未定义的参数字符串argv[argc]
。
如果要遍历参数的字符,则应使用二维访问,例如:
// assume there are two arguments present (argc == 3)
int len = 5; // assume there a 5 chars in argv[2]
for(int k = 0; k < len; k++) {
// do something for each char
if(argv[2][k] == 'x') { ... }
}
编辑:将示例更改为持有字符串的argv[2]
。