strcat字符串连接
strlen返回字符串长度

代码实现以及问题

下面代码使用的是指针的++的方式来扩展字符串的,不知道会不会由未知问题,因为在常规观念里数组是定长的,你可以使用内存分配的方式扩展,但是这种不扩展就使用的方式,担心会覆盖其他内存的数据

  1. #include <stdio.h>
  2. void _strcat(char *dst, const char* src)
  3. {
  4. char *tmp = dst;
  5. printf("tmp pointer=%p\n", tmp);
  6. printf("\ndet pointer=%p\n", dst);
  7. printf("det value=%c\n", *dst);
  8. while (*dst) {
  9. dst++;
  10. printf("\ndet pointer=%p\n", dst);
  11. printf("det value=%c\n", *dst);
  12. };
  13. dst--;
  14. printf("\n--det pointer=%p\n", dst);
  15. printf("--det value=%c\n", *dst);
  16. while (*dst) {
  17. dst++;
  18. *dst = *src;
  19. if (*src != '\0') {
  20. src++;
  21. }
  22. printf("\ndet++ pointer=%p\n", dst);
  23. printf("det++ value=%c\n", *dst);
  24. };
  25. }
  26. int strlen(const char *str) {
  27. int i = 0;
  28. while (*str != '\0') {
  29. i++;
  30. str++;
  31. }
  32. return i;
  33. }
  34. void A(char * str) {
  35. while (*str) {
  36. str++;
  37. if (*str == '\0') {
  38. printf("当前为\\0\n");
  39. }
  40. };
  41. if (*str == '\0') {
  42. printf("当前为\\0\n");
  43. *str = 'a';
  44. str++;
  45. *str = 'a';
  46. str++;
  47. *str = 'a';
  48. str++;
  49. *str = 'a';
  50. str++;
  51. *str = 'a';
  52. str++;
  53. *str = 'a';
  54. str++;
  55. }
  56. *str = '\0';
  57. }
  58. int main(){
  59. const char *str = "abcde";
  60. char str2[] = "1234567890";
  61. char str1[] = "1234567890";
  62. void _strcat(char *dst, const char* src);
  63. void A(char * str);
  64. // _strcat(str1, str);
  65. char str3[] = "12345";
  66. A(str3);
  67. printf("string=%s\n", str3);
  68. return 0;
  69. }

下面的代码会抛出Abort trap: 6,意义是指针越界,但是可以正常指向,并且可以正常扩展数组长度。

  1. #include <stdio.h>
  2. void A(int *p) {
  3. int *q = p;
  4. int i = 0;
  5. for (i = 0; i < 5; i += 1) {
  6. printf("%d", *p);
  7. p++;
  8. }
  9. *p = 6;
  10. p++;
  11. *p = 7;
  12. p++;
  13. *p = 8;
  14. p++;
  15. for (i = 0; i < 8; i += 1) {
  16. printf("%d", *q); // 可以正常输出
  17. q++;
  18. }
  19. printf("\n");
  20. }
  21. int main(){
  22. void A(int *p);
  23. int a[] = {1,2,3,4,5};
  24. A(a);
  25. return 0;
  26. }