为什么报错是分段错误呢大家
#include
int zuichanggonggongzichuan(int n,char(*)[10000]);
int main(void)
{
int n;
int i,k,count;
int T;
char ch[n][10000];
scanf("%d",&T);
scanf("%d",&n);
for(i=0;i<T;i++)
{
for(k=0;k"%s",ch[k][10000]);
}
count=zuichanggonggongzichuan(n,ch[n][10000]);
printf("%d",count);
}
return 0;
}
int zuichanggonggongzichuan(int n,char ch[n][10000])
{
int count=0;
int jishu[10000]={0};
int i,k;
int m;
//将每个字母字符串转换成数字字符串,然后一其值为索引存入一个辅助数组
for(i=0;i0;k!='\0';k++)
{
ch[i][k]=ch[i][k]-'a'+10;
}
}
//从第一个字符串开始以一其值为索引存入一个辅助数组
for(i=0;ch[0][i]!='0';i++)
{
m=ch[0][i];
jishu[m]++;
//防止重复字符
if(jishu[m]>1)
jishu[m]=1;
}
//开始利用辅助数组开始,从第二个字符串开始,要是第二个字符串中没有辅助数组中的值,就将这个索引对应的值化为0
for(i=1;i0;ch[i][k]!='0';k++)
{
m=ch[i][k];
jishu[m]++;
}
for(m=0;m<10000;m++)
{
if(jishu[m]==1)
jishu[m]=0;
if(jishu[m]>1)
jishu[m]=1;
}
}
for(m=0;m<10000;m++)
{
if(jishu[m]==1)
count++;
}
return count;
}
第8行的时候,n值还没输入啊,这时候数组大小无法判断大小,可能无法申请足够的内存。要先输入n值后,再定义数组
17行也不对, scanf("%s",ch[k][10000]);ch数组元素是字符,不是字符串啊。这里会崩溃。改为scanf("%s",ch[k]);
19行改为 count=zuichanggonggongzichuan(n,ch);
在此特别说明:
数组名作为函数参数时,需要分别在背调函数与主调函数中说明数组类型,并且要求实参与形参的数组类型相同,维数相同。在进行参数传递时,是“地址传递”,也就是说是实参数组的起始地址传递给了形参数组,而不是将实参数组中的元素一一传递给形参数组元素。
一维数组名作函数参数:
一维数组做函数参数时,函数声明的语法格式:
void disp(int a[10],int n); /* 声明数组参数的函数*/
void disp(int a[10]); /* 数组的大小也可以省略*/
函数调用的语法格式:
int sco[10];
disp(sco,10);
下边为大家举个例子:
在主函数中输入十个数存放在数组中,判断这个数组中的元素有几个正数?
#include<stdio.h>
int data(int a[10])
{
int i,b=0;
for(i=0;i<10;i++)
{
if(a[i]>0)
{
b++;
}
}
return b;
}
int main()
{
int num[10];
int i,B;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
B=data(num);
printf("该数组中的正数有%d个",B);
return 0;
}