| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2628 人关注过本帖
标题:求高手指教!自己编了一个用以实现strcat函数功能的程序,不过怎么都不能实 ...
只看楼主 加入收藏
渭平
Rank: 2
等 级:论坛游民
帖 子:22
专家分:14
注 册:2011-12-11
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:12 
求高手指教!自己编了一个用以实现strcat函数功能的程序,不过怎么都不能实现,求高手指教!
#include "stdafx.h"
#include<stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{    char strcat(char a[],char b[]);
    char ch1[50],ch2[50];
    printf("请输入字符串1:");
    scanf("%s",&ch1[50]);
    printf("请输入字符串2:");
    scanf("%s",&ch2[50]);
    printf("%s",strcat(ch1,ch2));
    return 0;
}
char strcat(char a[],char b[]){
    char c[100];
    char *p=NULL;
    int i=0;
    p=a;
    for(;(*p)!='\0';p++){
    c[i++]=*p;
    }
    p=b;
    for(;(*p)!='\0';p++){
    c[i+1]=*p;
    i++;
    }
    return c[100];
}
不知哪里出问题了,纠结好久,求高手指教
搜索更多相关主题的帖子: include return 字符串 
2011-12-11 13:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
请你解释一下你的代码都在干什么?

授人以渔,不授人以鱼。
2011-12-11 13:24
渭平
Rank: 2
等 级:论坛游民
帖 子:22
专家分:14
注 册:2011-12-11
收藏
得分:0 
回复 2楼 TonyDeng
我是想用指针来做的,我基础比较差。。。
main函数部分就不解释了
在定义函数里,我想用一个指针每次指向字符串的一个字符,并将其值赋给新定义的字符串c,该过程通过循坏实现,当a遇到'\0'时,使指针指向下一个字符串b,重复上述过程。
2011-12-11 14:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
你这个程序错误多得离谱。先不管什么指针不指针,你说scanf("%s",&ch1[50])在干什么?
从上到下每一行你都没调试就一气写完,再来问问题?哪个老师、什么书本教人这样写程序的?
 

[ 本帖最后由 TonyDeng 于 2011-12-11 14:31 编辑 ]

授人以渔,不授人以鱼。
2011-12-11 14:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你两个最基本的错误:
1.scanf()接收输入的方式是完全错误的,而且很多余地写个&符号,闲着没事干了?有数组名不用非要取地址指针,被指针神话整坏脑了!
2.在函数中返回局部数组c是根本无法达到目的的。

通观整个代码,你竟然以为return c[100]是返回数组,以及前面那一系列数组用法错误,都是连数组怎么回事都没搞清楚的,就入手做这样的程序,走路都不稳就学人跑。hello,world没练好之过。

授人以渔,不授人以鱼。
2011-12-11 14:28
渭平
Rank: 2
等 级:论坛游民
帖 子:22
专家分:14
注 册:2011-12-11
收藏
得分:0 
回复 5楼 TonyDeng

对不起
我确实什么都不懂
浪费您时间了,谢谢你的批评
2011-12-11 14:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不懂只是态度问题,没关系,那可以问。但不知道每步、每行调试程序,是学习态度问题,没有良好的学习习惯,解答你多少知识都是没用的,因为你必定要反复犯同类的错误以致无法独立完成程序。printf()、scanf()这样东西,基本用法你都错,还不知道先看看到底读入了什么,就到处问人程序为什么没达到目的,那怎么行呢。读的是从a[50]开始,但传入函数的却是从a[0]开始,a[0]-a[49]之间是什么,你看过没有?定义char a[50]的时候,a[50]在哪里你知道吗?C语言从0开始计数,知晓吗?全是基本错误,怎么说你呢?看你的语气是不服气的,没所谓,我借题发挥而已,别人会看帖子,有某一两个接受规劝就好。

[ 本帖最后由 TonyDeng 于 2011-12-11 14:53 编辑 ]

授人以渔,不授人以鱼。
2011-12-11 14:48
渭平
Rank: 2
等 级:论坛游民
帖 子:22
专家分:14
注 册:2011-12-11
收藏
得分:0 
恩恩,谢谢大神指点
我刚刚重新修改了一下
运行成功了
我习惯确实没养好
一则态度问题
二则上课进度太快了,自己没有拿出充分时间来消化
谢谢大神指点迷津
从现在开始我会改掉坏习惯的
还有一点就是,如何调试程序,我不太懂,想请教一下





     
   
2011-12-11 14:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我要外出了,简单点说说。逐步调试,举个例子,你scanf()之后,最好printf()一下看读入的是不是需要的结果,确认没错就可以把printf()语句删掉或注释掉。如果传入函数,在函数处也printf()一下得到的数据,看是不是跟调用处一样。这些方面,初学者是要做的,随着你写代码熟练,慢慢地可以放松,但初期一定要做,否则死在哪都不知道。以后有经验,就知道大概在什么地方应该检查一下了,马上就检查,不要等,不要侥幸积累到差不多时一气调试,那样反而更费时费力。

在你这个程序中,return c是不行的,因为c是局部变量,结束函数之后它就消失,外面无法得到返回的内容,只能得到一个虚幻的指针(那就是所谓的野指针)。这种情况,必须要在函数外面分配接纳空间,返回不是这样的。函数的设计思路有错误,你再想想。如果没辙,就看看标准库函数的格式,人家为什么要设计成这样传送和返回,对比一下,就学到你没想明白的东西了。标准strcat()是把后面的字串接驳在前面字串上的,返回的是第一个字串的地址,因此确保返回不会是虚指针,但要求第一个参数字串有足够的容纳空间。你回头再看看这里我说的,就明白自己该怎么设计了。最好不要设计在函数内部动态分配内存,因为那样在外面很难预测应该在什么时候释放这些被分配过的空间,特别是在函数被多次调用的情况下,也难以搞清楚到底哪次是使用了预先分配的数组、哪次是动态分配得到的指针,万一把动态指针指向了别处……程序设计就是想这些事。

[ 本帖最后由 TonyDeng 于 2011-12-11 15:21 编辑 ]

授人以渔,不授人以鱼。
2011-12-11 15:17
渭平
Rank: 2
等 级:论坛游民
帖 子:22
专家分:14
注 册:2011-12-11
收藏
得分:0 
回复 7楼 TonyDeng
不好意思,我真的知道我错了,没有不服气。
真的没有。
我很希望有大神来指导指导我学习C。
我也知道你们每天看那么多的帖子,很不容易,特别是像我这种的帖子。
再一次表达我的歉意。
我是刚刚接触C不久的人,能得到大神的建议,真的很宝贵。
不过,我确实很心急,还没学会走,就想跑。
还请多多包涵。
至于如何调试程序,望指点一二,谢谢了
2011-12-11 15:19
快速回复:求高手指教!自己编了一个用以实现strcat函数功能的程序,不过怎么都不 ...
数据加载中...
 
   



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

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