主题:c语言指针问题
大家先看看吧,这个题目是:编写一个函数,从字符串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);
}
我是这么写的结果出了一些问题(用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);
}