答案:runtime - error, 表示运行时错误, (access violation 表示访问越界)
问题出在你的p指针上, 当执行完组数据时, 你的p指针没有指向申请的空间的起始地址,而是
当前这组测试数据的最后一个字符的地址, 当执行多组数据后,p指针会指向申请空间意外的地方,所以访问越界。
我加了一个q指针, 保存申请空间的起始地址,执行一组测试数据后,p = q; 这样就不会越界了。
#include<stdio.h>
#include<malloc.h>
int main()
{
int n,i;
char *p, *q;
char a[6]={"aeiou"};
p=(char *)malloc(110);
q = p;
scanf("%d",&n);
getchar();
while(n--)
{
int s[]={0,0,0,0,0};
gets(p);
while(*p!='\0')
{
switch(*p)
{
case 'a':s[0]++;break;case 'e':s[1]++;break;case 'i':s[2]++;break;
case 'o':s[3]++;break;case 'u':s[4]++;break;
}
p++;
}
p = q;
for(i=0;i<5;i++)
printf("%c:%d\n",a[i],s[i]);
if(n)
printf("\n");
}
return 0;
}
其他:p++;之后p指向的下一个字节的地址了吧?
之前的就找不到了
下次再gets(p)就可能超过原来malloc分配的空间了
不能直接对p进行++操作,用另一个指针试试
上一个:你好,你有福建c语言二级考试的试题与答案吗?发给我可以吗?2680724224@qq.com谢谢
下一个:C++语言课程设计任务书