修改后的代码:(已检测,可执行)
#include
#include
#include
void main()
{
char *a;
int m,n,i,j;
printf("你要输入几个字母:");
scanf("%d",&n);
a=(char*)malloc((n+1)*sizeof(char));//带串结束符
memset(a,0,(n+1)*sizeof(char));//初始化
//n=strlen(a); //以'\0'(也就是0)为串结束符,统计串长度 ,清零后这个长度是0
printf("请输入你想要输入的%d个字母:",n);
scanf("%c",&a[0]);//去除输入n后的Enter键值
for(i=0; iscanf("%c",&a[i]);
for(i=0; i{
if(a[i]=='y')
{
for(j=i; ja[j]=a[j+1];
i--;//移位后当前位要重新判断
}
}
m=strlen(a);//这个长度时串的长度
printf("去掉y后的字符串为:");
for(i=0; iprintf("%c",a[i]);
free(a);
getch();
}
1、a=(char*)malloc(n*sizeof(char));这一句中在堆中的设定的空间为多大 --> 申请空间大小是n*sizeof(char));也就是n个字节;
2、n=strlen(a);运行后为啥我的结果总是n=3 --> malloc申请的空间是不初始化的,所以其空间值是随机的,而strlen计算字符串长度是从a开始查找,直到检测到'\0'才认为是串结束,统计这个长度作为返回值;所以n=3其实是一个随机的结果;
3、 m=strlen(a);中的m为多少 --> 此时m应该是a里面串的长度,当然要记住串有结束符才是准确的长度;