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

Find occurrences of alphabets in a command line argument

本文关键字:命令行 参数 查找      更新时间:2023-10-16

我是新来的!我正在为类编写这段代码,但我一直收到一个分段错误(核心转储)。为什么会发生这种情况?

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;

}

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

在第一次迭代中,计数将等于0,因此在使用之前不会发生内部循环,因此不会分配给标志。

您似乎想将*argv[1]与*store[z]进行比较,但*store[z]的值是多少?

在使用任何变量之前,请对其进行初始化!如果它是一个指针,请确保内存为它设置了mallocated。

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

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

排队:

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

您正在解引用数组CCD_ 6的索引CCD_。由于该指针未定义,程序通常会尝试访问受保护的内存位置。因此,它会分段。