一道c语言改错

来源:百度知道 编辑:UC知道 时间:2024/05/27 16:19:35
在主函数输入字符串,统计其字符 数字 空格的个数,且在主函数输出个数。
我编写的程序如下:
#include<stdio.h>
#define N 100
main()
{
int *count(char *string);
char string[N];
int *p,i,array[3];
p=array;
gets(string);
p=count(string);
for(i=0;i<3;i++)
printf("%3d",array[i]);
}
int *count(char *string)
{
int i=0,j=0,k=0,a[3];
for(string;*string;string++)
{
if(*string>='a'&&*string<='z'||*string>='A'&&*string<='Z')
i++;
if(*string>='0'&&*string<='9')
j++;
if(*string==' ')
k++;
}
a[0]=i;
a[1]=j;
a[2]=k;
return a;
}
输入一字符串,发现统计不对,请大伙帮下我啊
不要改啊 找错

楼主,你只要有两个错误
1.p=array;......................p指向数组array的首地址
p=count(string);............p更改为:指向函数返回的指针所指向的地址
printf("%3d",array[i]);......array数组没有赋值,输出随机值
所以
应该为printf("%3d",*(p+i));
----------------------------------------------
2.count()函数中定义的数组a[3],它的内存分配在函数退出时就释放掉了
所以,你不能返回一个已经释放掉内存的地址,否则得到随即值
你可以为count()函数输入一个在main()里定义的整形数组,从而返回这个数组的首地址
程序修改如下:
--------------------------------------------------#include<stdio.h>
#define N 100
main()
{
int *count(char *string,int *array);
char string[N];
int *p,i,array[3];
gets(string);
p=count(string,array);
for(i=0;i<3;i++)
printf("%3d",*(p+i));
printf("\n");
}
int *count(char *string,int *array)
{
int i=0,j=0,k=0;
int *p=array;
for(;*string;string++)
{
if(*string>='a'&&*string<='z'||*s