追梦少年_66 发表于 2017-11-19 23:17

菜鸟学C第12题:编写一个函数JOIN,让它实现字符串连接运算功能。

/*
/*12.        编写一个函数JOIN,让它实现字符串连接运算功能

/*/
#include<stdio.h>
#include<stdlib.h>

char * join(char * str, const char * substr) {
        char * p = str;
        while (*p) { p++; }
        while(*p++=*substr++){}
        return str;
}

void main() {
        char str1 = "123";
        char substr = "456";
        printf("%s", join(str1, substr));
        getchar();
}

爱飞的猫 发表于 2017-11-19 23:32

建议已优雅与易读为目标而非为了短小而精简。
万一遇到奇怪的毛病非常不方便调试。

追梦少年_66 发表于 2017-11-19 23:36

jixun66 发表于 2017-11-19 23:32
建议已优雅与易读为目标而非为了短小而精简。
万一遇到奇怪的毛病非常不方便调试。

好的,兄弟

A羽飞 发表于 2017-11-19 23:46

谢谢分享。。。。。。。。

wang65424773 发表于 2017-11-20 06:43

这个是字符串连接,直接用sprintf不就可以了吗?

追梦少年_66 发表于 2017-11-20 08:42

wang65424773 发表于 2017-11-20 06:43
这个是字符串连接,直接用sprintf不就可以了吗?

要自己实现,成为变成高手

keeeeymann 发表于 2017-11-20 11:00

join函数对传入参数进行了修改,这种编程思想是有害的,因为如果一个函数有返回值,且一个返回值已经足够的情况下,一般默认认为函数不会对传入参数进行修改。更不必说返回值跟修改后的传入参数完全一致,这是没有必要的事情。
而且这种实现要求第一个字符串留有足够的空白位置,否则就会数组越界。
最好的实现方法仍然是将两个字符串复制到新的内存空间中,而不是企图取巧省下一点代码和内存。

追梦少年_66 发表于 2017-11-20 14:15

keeeeymann 发表于 2017-11-20 11:00
join函数对传入参数进行了修改,这种编程思想是有害的,因为如果一个函数有返回值,且一个返回值已经足够的 ...

你说得非常有道理,朋友
页: [1]
查看完整版本: 菜鸟学C第12题:编写一个函数JOIN,让它实现字符串连接运算功能。