大家先看看吧,这个题目是:编写一个函数,从字符串string的第i个字符开始删除n个字符。
我是这么写的结果出了一些问题(用GCC编译的):
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char new[40];
int lon;
void del(int *p,int i,int n)
{
   char temp[40];
   int bat;
   for(bat=0;bat<i-1;bat++,p++)
  {
    new[bat]=*p;
  }
   for(p+=n-1;bat<lon-n+1;bat++,p++)
  {
   new[bat]=*p;
  }
  new[bat]='\0';
  }
main()
{
  char string[40];
  int *p,i,n;
  printf("请输入一个字符串吧:  "); fgets(string,30,stdin);
  printf("\n  您想从第几个开始删除呢?说说吧:  "); scanf("%d",&i);
  printf("\n 这样吧,想从第%d个开始,想删除几个:  ",i); scanf("%d",&n);
  lon=strlen(string);
  if(i>lon||n>lon-1-i) {printf("\n 再看看,您是不是输入错误了呢。\n");exit(0);}
  p=(int *)string;
  del(p,i,n);
  printf("最终是不是这个字符串啦,呵呵:%s \n",new);
}  
这样子,编译是不会出现问题的,可是运行是达不到目地,我用gdb调适时,在第二次运行函数del中的第一个for中的new[bat]=p;时,就出现了问题,也就是说,这里的指针+1好像不是到下一个地址。。当然最后就达不到目地了,
于是,我改不用指针,就成功了,以下是没用指针,成功的:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char new[40];
int lon;
void del(char string[],int i,int n)
{
   char temp[40];
   int bat,di=0;
   for(bat=0;bat<i-1;bat++)
  {
    new[bat]=string[bat];
  }
   for(di=n+i-1;bat<=lon-n;bat++,di++)
  {
   new[bat]=string[di];
  }
  new[bat]='\0';
  }
main()
{
  char string[40];
  int *p,i,n;
  printf("请输入一个字符串吧:  "); fgets(string,30,stdin);
  printf("\n  您想从第几个开始删除呢?说说吧:  "); scanf("%d",&i);
  printf("\n 这样吧,想从第%d个开始,想删除几个:  ",i); scanf("%d",&n);
  lon=strlen(string);
  if(i>lon||n>lon-1-i) {printf("\n 再看看,您是不是输入错误了呢。\n");exit(0);}
  del(string,i,n);
  printf("最终是不是这个字符串啦,呵呵:%s \n",new);
}