| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1196 人关注过本帖
标题:[求助]TC编译的问题,请看看
只看楼主 加入收藏
xieyuanchang
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-8-5
收藏
得分:0 
可以用输出参数不是很好么?
void copy(char *x,int y,char* output)

2007-08-09 21:32
zhss5
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2005-12-22
收藏
得分:0 

将 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;
}

2007-08-09 21:48
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
楼上的,不需要多加一个z参数啊
2007-08-09 21:55
anelwl
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-7-26
收藏
得分:0 
楼上的方法不错,*(s+j)='\0';

2007-08-09 22:01
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分: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编辑过]

2007-08-09 22:10
zhss5
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2005-12-22
收藏
得分:0 

楼上函数定义的妙!

2007-08-09 22:16
笨笨林
Rank: 6Rank: 6
等 级:贵宾
威 望:21
帖 子:482
专家分:408
注 册:2007-7-28
收藏
得分:0 

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


程序授权说明:http://www./authorization.php  无路难开路难。  帮助别人是快乐的,也只有帮助别人,才能得到别人的帮助。互相帮助,才能共同进步。
2007-08-10 15:58
快速回复:[求助]TC编译的问题,请看看
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023140 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved