当前位置: 代码迷 >> C语言 >> [求助]TC编译的问题,请看看
  详细解决方案

[求助]TC编译的问题,请看看

热度:97   发布时间:2007-08-09 21:32:55.0
可以用输出参数不是很好么?
void copy(char *x,int y,char* output)
----------------解决方案--------------------------------------------------------

将 anelwl 的代码再修改了下:


#include <stdio.h>
#include <stdlib.h>
char *copy(char *x,int y, int z) // z为原来字符串所使用的内存空间
{ char *s;
int i,j;
//分配内存应该是指针所指向内容在内存中所占的空间,所以前面先乘上(z-y+1)
s=(char*)malloc((z-y+1)*sizeof(char));
i=y-1; //从第y个字符开始复制,应该是 x+y-1
j=0;
while(*(x+i)!='\0')
{ *(s+j)=*(x+i);
i++;
j++;
}
*(s+j)='\0'; //字符串最后加上一个结束字符。
return(s);
}

int main()
{

char a[100],*p;
int m;
printf("the original string is:\n");
gets(a);
printf("m=");
scanf("%d",&m);
p=copy(a,m, 100);
printf("the copyed string is:\n");
printf("%s\n",p);
return 0;
}


----------------解决方案--------------------------------------------------------
楼上的,不需要多加一个z参数啊
----------------解决方案--------------------------------------------------------
楼上的方法不错,*(s+j)='\0';
----------------解决方案--------------------------------------------------------
char* copy(char *x,int y)
{
char *s, *s1;
x += y-1;
for(s=x;*s;s++);
s = s1 = (char*)malloc((s-x+1)*sizeof(char));
for(; *x; x++,s1++)
{
*s1 = *x;
}
*s1 = '\0';
return s ;
}
不要z

[此贴子已经被作者于2007-8-9 22:12:09编辑过]


----------------解决方案--------------------------------------------------------

楼上函数定义的妙!


----------------解决方案--------------------------------------------------------

while(*(x+i)!='\0')
{ *(s+j)=*(x+i);
i++;
j++;
}
我觉得这里有问题,被赋值的字符串没有定义结束标识,这样程序能运行,但是在有些情况下会出错,我以前就碰到过这样的问题,有时结果是对的,有时又是错的.


----------------解决方案--------------------------------------------------------
  相关解决方案