首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请教这个程序出错在哪里呀?问~多谢回答~

2012-02-05 
请问这个程序出错在哪里呀?急问~~~谢谢回答~~题目:得到指定字符串s1中第m个字符,开始长度为n个字符的字符

请问这个程序出错在哪里呀?急问~~~谢谢回答~~
题目:得到指定字符串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();
}

热点排行