| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 389 人关注过本帖
标题:大侠们分析一下这个!
只看楼主 加入收藏
feixiang1231
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-12-6
收藏
 问题点数:0 回复次数:4 
大侠们分析一下这个!
#include<stdio.h>                                         //这道题是,让两个字符串进行连接!
char Cp(char *p,const char *q);
int main()
{
    char str1[20]="asdfg";
    char str2[12]="hjkl";
    Cp(str1,str2);
    printf("%s\n",str1);                                    
    return 0;
}
char Cp(char *p,const char *q)
{
    while('\0'!=*p)
    {
        p++;
    }
    while('\0'!=*q)
    {
        *p=*q;
        q++;
        p++;
     }
        *p='\0';
    }
2010-12-13 16:35
五当家
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:2
帖 子:1112
专家分:3674
注 册:2010-10-20
收藏
得分:0 
#include<stdio.h>                                         //这道题是,让两个字符串进行连接!
char Cp(char *p,const char *q);
int main()
{
    char str1[20]="asdfg";
    char str2[12]="hjkl";
    Cp(str1,str2);
    printf("%s\n",str1);                                    
    return 0;
}
char Cp(char *p,const char *q)
{
    while('\0'!=*p)
    {
        p++;
    }
    while('\0'!=*q)
    {
        *p=*q;
        q++;
        p++;
     }
        *p='\0';
    }


你这个子函数没有返回值,所以应该是void 型的而不是char
如下:

#include<stdio.h>                                         //这道题是,让两个字符串进行连接!
void Cp(char *p,const char *q);
int main()
{
    char str1[20]="asdfg";
    char str2[12]="hjkl";
    Cp(str1,str2);
    printf("%s\n",str1);                                    
    return 0;
}
void Cp(char *p,const char *q)
{
    while('\0'!=*p)
    {
        p++;
    }
    while('\0'!=*q)
    {
        *p=*q;
        q++;
        p++;
    }
        *p='\0';
}

经验积累中............
2010-12-13 16:39
feixiang1231
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-12-6
收藏
得分:0 
结果是:asdfghjkl。这个成功连接了!
加入我把他的最后改一下:
#include<stdio.h>                                         //这道题是,让两个字符串进行连接!
char Cp(char *p,const char *q);
int main()
{
    char str1[20]="asdfg";
    char str2[12]="hjkl";
    Cp(str1,str2);
    printf("%s\n",str1);                                    
    return 0;
}
char Cp(char *p,const char *q)
{
    while('\0'!=*p)
    {
        p++;
    }
    while('\0'!=*q)
    {
        *p=*q;
        q++;
       p++;                    //这个地方的p++拿出来放在括号外面;

     }                    
        p++;
        *p='\0';
    }

运行的结果就是:asdfgl        中间的hjk怎么没有了啊?



还有最后一个问题就是数组str1[],str2[],里面不填数字,也能成功的链接,但是随后会出现一个窗口显示:  .exe已停止工作。出现了一个问题,导致程序停止正常工作,如果有可用的解决方案,Windows将关闭程序并通知你。
为什么啊,请多多指点,不胜感激!
2010-12-13 16:53
五当家
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:2
帖 子:1112
专家分:3674
注 册:2010-10-20
收藏
得分:0 
如果p++放外面,那么str2中的字符赋给str1后,是一个一个赋的,p没有及时进行自加,所以后来的字符会把前一个字符覆盖了,所以最后是asdfgl,中间的hjk没有了.
数组str1和str2在定义时不给定大小,你是这样的str1[]="asdfg";系统自动认为str1占5个字符.后来再把str2加进去就会出错,是内存的问题.

经验积累中............
2010-12-13 17:21
feixiang1231
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-12-6
收藏
得分:0 
回复 4楼 五当家
太厉害了,我明白了,谢谢哈,以后多向您学习,希望多指教
2010-12-13 20:08
快速回复:大侠们分析一下这个!
数据加载中...
 
   



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

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