请问这个程序出错在哪里呀?急问~~~谢谢回答~~
题目:得到指定字符串s1中第m个字符,开始长度为n个字符的
字符串s2。(要求用指针参数实现)
#include "stdio.h "
#include "alloc.h "
#include "string.h "
void midstring(char *s1,char *s2,int m,int n)
{int i=0,p=m;
while (i <=m+n-2)
{*s2=*(s1+p);
s2++;p++;i++;}
}
void main()
{char (*pf)();
char *s1,*s2,str[20];
int m,n;
clrscr();
scanf( "%d%d ",&m,&n);
gets(str);
s1=(char *)malloc(strlen(str)+1);
s2=(char *)malloc(n+1);
strcpy(s1,str);
pf=midstring;
(*pf)(s1,s2,m,n);
puts(s2);
free(s1);free(s2);
getch();
}
[解决办法]
#include "stdio.h "
#include "malloc.h "
// include "alloc.h "
#include "string.h "
// ============================================================================
// ==============================================================================
void midstring(char *s1, char *s2, int m, int n)
{
//~~~~~~~~~~~~~
int i = 0, p = m;
//~~~~~~~~~~~~~
while (*(s1 + p) && i < n) {
*s2 = *(s1 + p);
s2++;
p++;
i++;
}
*s2 = 0;
}
// ============================================================================
// ==============================================================================
int main()
{
//~~~~~~
void (*pf) (char *, char *, int, int);
//~~~~~~~~~~~~~~~~~~~
//~~~~~~
char *s1, *s2, str[20];
int m, n;
//~~~~~~~~~~~~~~~~~~~
// clrscr();
scanf( "%d%d\n ", &m, &n);
gets(str);
s1 = (char *)malloc(strlen(str) + 1);
s2 = (char *)malloc(n + 1);
strcpy(s1, str);
pf = midstring;
(*pf) (s1, s2, m, n);
puts(s2);
free(s1);
free(s2);
// getch();
return 0;
}
随便改了下,基本没考虑健壮性,比如m比s1的长度还大的话就会出问题~
[解决办法]
#include "stdio.h "
#include "malloc.h "
#include "string.h "
#include "stdlib.h "
void midstring(char *s1,char *s2,int m,int n)
{
int i=0,p=m;
while (i <=m+n-2)
{*s2=*(s1+p);
s2++;p++;i++;}
}
void main()
{char (*pf)();
char *s1,*s2,str[20];
int m,n;
system( "cls ");
scanf( "%d%d ",&m,&n);
gets(str);
s1=(char *)malloc(strlen(str)+1);
s2=(char *)malloc(n+1);
strcpy(s1,str);
pf=midstring;
(*pf)(s1,s2,m,n);
puts(s2);
free(s1);free(s2);
getch();
}