经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
字符串拼接函数的实现(简易版)
来源:cnblogs  作者:hejjon  时间:2019/5/7 8:56:59  对本文有异议

字符串操作函数的实现----字符串拼接

  1. 1 #include <stdio.h>
  2. 2
  3. 3 // 求字符串长度
  4. 4 int getLength(char *str) {
  5. 5
  6. 6 int len;
  7. 7 for (len = 0; str[len]!= '\0'; len++);
  8. 8
  9. 9 return len;
  10. 10 }
  11. 11
  12. 12
  13. 13 // 字符串拼接函数实现, 将str2拼接到str1后
  14. 14 char *myStrcat(char *str1, char *str2) {
  15. 15 int len = getLength(str1); // 字符串str1的长度
  16. 16 int i, j;
  17. 17
  18. 18 for (i = len, j = 0; str2[j] != '\0'; i++, j++) {
  19. 19 str1[i] = str2[j];
  20. 20 }
  21. 21
  22. 22 str1[i] = '\0'; // 手动添加字符串结束标志
  23. 23
  24. 24 return str1;
  25. 25 }
  26. 26
  27. 27 int main() {
  28. 28
  29. 29 char s1[100]="abcd";
  30. 30 char s2[40]="efgh";
  31. 31 char *p = s1;
  32. 32
  33. 33 p = myStrcat(s1, s2); // 数组名是常量, 不可以做左值
  34. 34
  35. 35 printf("s1 = %s\n", s1);
  36. 36 printf("s2 = %s\n", s2);
  37. 37 printf("s1 + s2 = %s\n", p);
  38. 38
  39. 39 return 0;
  40. 40 }

 运行结果:

注意事项:

0° 主函数main中的测试字符串s1不能定义成char *s1 = "abcd"的形式, 这种定义方式只是声明一个char型的指针变量指向字符串 "abcd", 而并没有开辟内存空间, 不能进行拼接.

1° 在myStrcat函数中拼接动作完成后需要手动添加一个字符串结束标志'\0'.

2° 字符数组s1的容量要足够大, 容量至少应是两字符串实际长度的和.

 

思考(仅仅个人观点):

曾尝试过在myStrcat()函数中事先判断字符串s1的容量, 但考虑到字符数组做函数参数时会退化成指针, 用getLength()函数获取长度只能得到它的实际有效长度而无法获取字符数组的容量.

也就是说在主函数中定义的s1[100], 将s1作为参数传进去, 就退化为指针了, 所以你无论是借助sizeof还是strlen都无法得知它的容量.

 

原文链接:http://www.cnblogs.com/hejjon/p/10821853.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号