c语言编程求解?

2025-03-28 23:17:53
推荐回答(1个)
回答1:

修改后的代码:(已检测,可执行)

#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; i     scanf("%c",&a[i]);  
 
     
     for(i=0; i     {        
              if(a[i]=='y') 
              {           
                  for(j=i; j                           a[j]=a[j+1]; 
                  i--;//移位后当前位要重新判断   
              }
     }    
     
     m=strlen(a);//这个长度时串的长度    
     printf("去掉y后的字符串为:");    
     
     for(i=0; i     printf("%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里面串的长度,当然要记住串有结束符才是准确的长度;