| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1199 人关注过本帖
标题:[求助]TC编译的问题,请看看
只看楼主 加入收藏
yuanyang317
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-8-7
收藏
 问题点数:0 回复次数:26 
[求助]TC编译的问题,请看看

题目如下:
有一字符串,包含n个字符,写一个函数,将此字符串中从第m个字符开始的全部字符复制成另一个字符串,并输出复制后的字符串。

我的程序:
char *copy(x,y)
char *x;
int y;
{ char *s; /另定义一指针s,把原字符串后面的字符都一一赋给它/
int i,j;
i=y;
j=0;
while(*(x+i)!='\0')
{ *(s+j)=*(x+i);
i++;
j++;
}
return(s);
}

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

比如输入一个字符串:reading-room,如果另m=9的话,应该输出为room,但是不知道为什么为什么我的输出不对,是不是我函数定义那个指针s的时候有什么错误哦?或者是其他的错?请指点,感激不尽~~

搜索更多相关主题的帖子: 编译 
2007-08-08 03:22
yuanyang317
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-8-7
收藏
得分:0 

会不会是指针设置有问题

2007-08-08 09:56
星星鱼虾蟹
Rank: 1
等 级:新手上路
帖 子:191
专家分:0
注 册:2007-6-2
收藏
得分:0 
以下是引用yuanyang317在2007-8-8 3:22:54的发言:

题目如下:
有一字符串,包含n个字符,写一个函数,将此字符串中从第m个字符开始的全部字符复制成另一个字符串,并输出复制后的字符串。

我的程序:
char *copy(x,y)
char *x;
int y;
{ char *s; /另定义一指针s,把原字符串后面的字符都一一赋给它/
int i,j;
i=y;
j=0;
while(*(x+i)!='\0')
{ *(s+j)=*(x+i);
i++;
j++;
}
return(s);
}/*这是...*/

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

比如输入一个字符串:reading-room,如果另m=9的话,应该输出为room,但是不知道为什么为什么我的输出不对,是不是我函数定义那个指针s的时候有什么错误哦?或者是其他的错?请指点,感激不尽~~


2007-08-08 11:31
anelwl
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-7-26
收藏
得分:0 

你的程序编写很乱,char *s,int y没有必要定义为外部变量,还有你的参数名称的定义也有很大争议,x,y一个被定义为char 型,一个定义为int型,很乱,建议你多看些C语言编写的规范,你的copy函数:
char *copy(x,y)
char *x;
int y;
{ char *s; //这里你定义了指针却没有明确的指向地址,这是很危险也是错误的
int i,j;//这里定义的i其实是多余的
i=y;
j=0;
while(*(x+i)!='\0')
{ *(s+j)=*(x+i);
i++;
j++;
}
return(s);
}
下面是我的修改:(因为想写的规范点,改动比较大)
#include <stdio.h>
#include <stdlib.h>
#define N 100
char *copy(char *str,int y)
{ char *pa; //另定义一指针pa//
int j;
j=0;
pa=str+y; //让其指向一个地址
return pa; //返回pa的内存地址
}

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

[此贴子已经被作者于2007-8-8 11:34:58编辑过]


2007-08-08 11:32
yuanyang317
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-8-7
收藏
得分:0 

很感谢你的指点,我想补充几点你提出的问题
1、我没有把 char *copy(x,y) char *x;int y;定义成外部变量,我只是想说明copy函数形参的类型,这跟char *copy(char *str,int y)的形式是一样的吧。
2、我把x、y一个定义成char型,一个定义成int型,是因为实参调用copy函数a和m的形式决定的吧。
3、我所写的copy函数的本意是想把输入的字符串从y后的字符一个一个的赋给*s,不知道我这样做正确了没?
还有,我想问下,你main函数最后的return 0这句话的目的是什么呢?
谢谢你的指导,希望还能和你交流。

2007-08-08 12:57
yuanyang317
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-8-7
收藏
得分:0 

还有,麻烦你留个QQ嘛,我还有问题问你,谢谢

2007-08-08 14:02
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:0 
以下是引用yuanyang317在2007-8-8 3:22:54的发言:

题目如下:
有一字符串,包含n个字符,写一个函数,将此字符串中从第m个字符开始的全部字符复制成另一个字符串,并输出复制后的字符串。

我的程序:
char *copy(x,y)
char *x;
int y;
{ char *s; ---------定义一个局部指针
int i,j;
i=y;
j=0;
while(*(x+i)!='\0')
{ *(s+j)=*(x+i);--------如何对一个char指针地址的下几个地址赋char值,你能保证那个地址是可用的??
i++;
j++;
}
return(s);---------将局部指针返回,当函数调用完毕时会被系统回收,你将得到一个空的指针!
}
总之这个函数错的很多!!

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

比如输入一个字符串:reading-room,如果另m=9的话,应该输出为room,但是不知道为什么为什么我的输出不对,是不是我函数定义那个指针s的时候有什么错误哦?或者是其他的错?请指点,感激不尽~~

还是用strncpy函数吧!!


要练习算法就来http:///!!有挑战哦!!
2007-08-08 14:34
anelwl
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2007-7-26
收藏
得分:0 
回复:(yuanyang317)很感谢你的指点,我想补充几点你...

下面是按着你的思路帮你修正过的程序:(已经编译通过)
#include <stdio.h>
#include <stdlib.h>
char *copy(char *x,int y)
{ char *s;
int i,j;
s=(char*)malloc(sizeof(char)); //为定义的指针分配内存地址,这是必须的
i=y;
j=0;
while(*(x+i)!='\0')
{ *(s+j)=*(x+i);
i++;
j++;
}
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);
printf("the copyed string is:\n");
printf("%s\n",p);
return 0;
}


main函数里的return 0;只是规范标准,int main(){ return 0}你也可以不写,但是程序运行会出现warning 一个好的程序员应该尽量做到最后调试出的程序不会出现warnings!


2007-08-08 15:06
yuanyang317
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-8-7
收藏
得分:0 
明白了,感谢感谢,我就是在想那个*s要不要分配内存空间
2007-08-08 15:10
yuanyang317
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-8-7
收藏
得分:0 
那你那个main函数不用指定类型啊~~这样就不会出现warning了嘛

还有,如果你方便的话留个QQ嘛,平时多交流嘛,我这段时间都在学C,还有些问题可能要向你请教的,呵呵
2007-08-08 15:12
快速回复:[求助]TC编译的问题,请看看
数据加载中...
 
   



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

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