命令行参数中出现字母

时间:2015-11-18 14:18:16

标签: c++

我对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;
}

1 个答案:

答案 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]