以下是引用hellovfp在2011-1-28 17:48:03的发言:
S指针是realloc动态分配的?为什么要用这个函数呢?
把你的程序代码贴出来,有人会帮你找到更多的问题。
不这样的话就只有给把S做成数组,给个长一些的范围,比如说S[100],S[1000],感觉不怎么爽,
所以strcat的时候就用了动态,本来还写了一个在函数里面分配的,不过那样的话参数就要写成my_strcat(&s,t,n),题目上要求的形式是strcat(s,t,n).所以就勉强一下了,反正是自己用的
程序代码:
#include <stdio.h>
#include <stdlib.h>
int my_strcat();
int my_strcpy();
int my_strcmp();
void main()
{ int i=1,j,n,c;
char *s;
char *t;
while(i){
fflush(stdin); //清除输入缓冲区,为getchar()扫除障碍。
printf("请输入第一个字符串:\n");
for(i=0,s=(char*)malloc(sizeof(char));(*(s+i)=getchar())!='\n';i++)
s=(char*)realloc(s,(i+2)*sizeof(char));
*(s+i)='\0';
printf("请输入第二个字符串:\n");
for(j=0,t=(char*)malloc(sizeof(char));(*(t+j)=getchar())!='\n';j++)
t=(char*)realloc(t,(j+2)*sizeof(char));
*(t+j)='\0';
printf("请输入n:\n");
scanf("%d",&n);
printf("请输入相应的值(1、2、3)选择需要进行的测试:\n");
printf("1、strcpy\n");
printf("2、strcat\n");
printf("3、strcmp\n");
scanf("%d",&c);
switch(c)
{
case 1:
if(my_strcpy(s,t,n)==0) printf("需处理的第二个字符串部分不能比第一个字符串长\n");
printf("结果为:%s\n",s);
break;
case 2:
s=(char*)realloc(s,(i+j+1)*sizeof(char));//给第二个字符串的加入增加空间
my_strcat(s,t,n);
printf("结果为:%s\n",s);
break;
case 3:
printf("结果为:%d\n",my_strcmp(s,t,n));
break;
}
free(s);
free(t);
printf("继续测试请输入1\n");
printf("退出请输入0\n");
scanf("%d",&i);
}
}
int my_strcat(char *s,char *t,int n)
{
int i,j,k;
for(i=0;*(s+i)!='\0';i++);
for(j=0;*(t+j)!='\0'&&j<n-1;j++);
for(k=0;k<=j;k++)
{
*(s+i++)=*(t+k);
}
*(s+i)='\0';
};
int my_strcpy(char *s,char *t,int n)
{
int i=0,j=0;
while(*(s+i)!='\0') i++;
while(j<n&&((*(t+j))!='\0')) j++;
if(n>i) return 0;
for(i=0;i<j;i++)
{
*(s+i)=*(t+i);
}
*(s+i)='\0';
return 1;
};
int my_strcmp(char *s,char *t,int n)
{
int i,j;
for(i=0;i<n;i++)
{
if(*(s+i)-*(t+i)!=0)
return (int)(*(s+i)-*(t+i));
}
if(*(s+i)=='\0')
return 0;
else return (int)(*(s+i));
};
[
本帖最后由 yellowcat 于 2011-1-28 17:55 编辑 ]