在命令行参数中查找字母的出现次数

时间:2015-11-18 12:44:51

标签: c++

我是新来的! 我正在为类编写此代码,并且我不断收到分段错误(核心转储)错误。为什么会这样?

int main(int argc,char *argv[])
{
char *store[100];int freq[100]={0};int flag;int count=0;int t;
for(int i=0,j=0;i<argc;i++)
{
    for(int z=0;z<count;z++)
    {
        if(*argv[i]==*store[z]) flag=1;t=z;break;
    }
       if(flag==0) {*store[j]=*argv[i];j++; count++;}
       else freq[t]+=1;
       flag=0;
}
for(int x=0;x<count;x++) cout<<*store[x]<<"\t"<<freq[x]<<endl;

}

3 个答案:

答案 0 :(得分:1)

您正在访问一个unitialised变量,导致未定义的行为。(int flag)

在第一次迭代中,计数将等于0,因此在使用之前不会发生内部循环,因此不会对flag进行赋值。

答案 1 :(得分:0)

似乎你想比较* argv [1]和* store [z],但* store [z]的值是多少?

在使用任何变量之前,先将其初始化!如果它是一个指针,请确保为其记录内存。

答案 2 :(得分:0)

char *argv[]char *store[100]是指向char的指针数组,即通常是以空字符结尾的字符串数组。

数组store未初始化,因此,它包含指向某个未定义内存位置的100个指针。

排队:

if(*argv[i]==*store[z]) flag=1;t=z;break;

您要取消引用数组z的索引store处的指针。由于此指针未定义,程序通常会尝试访问受保护的内存位置。因此,它是段错误。