鱼C论坛

 找回密码
 立即注册
查看: 2069|回复: 9

用C语言自己写strcat遇到的问题

[复制链接]
发表于 2014-7-12 13:20:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目标是用for循环来写,自己写了一段,不知道错误在哪,其中StringLen()已经成功实现了,得到了字符串的长度。编译通过,不知道实际错误在哪?
char* StringCat(char* s1,char* s2)
{

        int Len1 = StringLen(s1);
        int Len2 = StringLen(s2);
        char* s = (char*)malloc(sizeof(char)*(Len1+Len2+1));
       
        int i;
        for(i=0;i<Len1;i++)
        {
                *(s+i) = *(s1+i);
        }
       
        int j;
        for(j=0;j<Len2;j++)
        {
                *(s+Len1+j) = *(s2+j);
               
        }

        *(s+Len1+Len2) = '\0';
        *s1 = *s;
        free(s);
        return s1;
       
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-12 13:36:17 | 显示全部楼层
不知道这样可不可以:big
#include <iostream>
using namespace std;
char* StringCat(char* s1,char* s2)
{

        int Len1 = strlen(s1);//StringLen(s1)
        int Len2 = strlen(s2);//StringLen(s2)
        for(int i=0;i<Len2;i++)
                {
                        s1[Len1+i]=s2[i];
                }
        return s1;   
}
int main()
{
        char s1[10]="c/",s2[]="c++";
        char* s3=StringCat(s1,s2);
        cout<<s3<<endl;
        return 0;
}

点评

我很赞同!: 4.0
我很赞同!: 4
写得挺好  发表于 2014-7-16 21:36
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-12 13:47:07 | 显示全部楼层
农夫三拳的代码可以执行,但是我的问题是 : 我的代码错误在哪里,请指出来,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2014-7-13 03:30:24 | 显示全部楼层
27149_智者天下 发表于 2014-7-12 13:47
农夫三拳的代码可以执行,但是我的问题是 : 我的代码错误在哪里,请指出来,谢谢

*s1 = *s; 错误, 长度不一样 这样赋值 *s1还是相当于*s1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-13 05:43:17 | 显示全部楼层
我覺得你可以再寫一個strtok 以及替代字串跟替代字元的函數看看
比如說一個字串"skfjwnwfkmgwlg||||fkkrkjgl" 把 "||||" 替代成其他的字串, 這個難度有點高嘗試看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-16 21:34:55 | 显示全部楼层
*s1 = *s;
楼主太想当然了,这是初学者容易出现的问题,这个地方应该用strcpy函数,楼主可以自己也去实现一个
还有就是这个函数的s1所指的字符串空间需要足够长,否则容易越界,
越界判断在字符串操作的时候需要考虑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-16 21:43:15 | 显示全部楼层
#include <stdio.h>
int main()
{
        char s1[10]="123",s2[]="abc";
        *s1 = *s2;
    printf("%s\n",s1);
    return 0;
}

*s1 = *s2;
相当于   s1[0] = s2[0];
因为  s1是char* 类型,   
所以 *s1 只能取到一个char的内存,就是s1所指向的字符串的第一元素

点评

说的挺好,哈哈  发表于 2014-7-16 21:43
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-17 15:22:32 | 显示全部楼层
- -我以为你是问怎么写.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 15:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表