当前位置:  开发笔记 > 编程语言 > 正文

使用指针实现strcat()

如何解决《使用指针实现strcat()》经验,为你挑选了1个好方法。

我正在阅读K&R并尝试使用指针编写strcat版本(将一个字符串附加到另一个字符串的末尾).这就是我所拥有的:

#include
void mystrcat(char *s,char *t)
{
    while(*s++);
    *s--;
    while(*s++ = *t++);
}

int main()
{
    int size = 1024;
    char *s1, *s2;
    s1 = malloc(size);
    s2 = malloc(size);
    s1 = "Hello ";
    s2 = "World";
    mystrcat(s1,s2);
    printf("%s",s1);
    return 0;
}

该程序运行但直接崩溃,对指针不是很有经验,所以无法解决错误.



1> Baltasarq..:

问题出在这里:

s1 = malloc(size);
s2 = malloc(size);
s1 = "Hello ";
s2 = "World";

你已经为s1和分配了空间s2,但是不是使用它,而是让它们指向字符串文字.这些字符串文字存储在内存的不可写的位置(即,你不应该乱用它).

简而言之,您必须将代码更改为:

s1 = malloc(size);
s2 = malloc(size);
strcpy( s1, "Hello " );
strcpy( s2, "World" );

现在您正在使用分配的空间.希望这可以帮助.

编辑:你这里也有问题:

void mystrcat(char *s,char *t)
{
    while(*s++);
    *s--;
    while(*s++ = *t++);
}

第二行应该是s--,而不是*s--.*s--会减少指针s并访问新位置.您实际上不需要取消引用指针只是为了减少它.您只希望指针在指向现在之前指向一个位置.那很简单s--.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有