代码实现以及问题
下面代码使用的是指针的++的方式来扩展字符串的,不知道会不会由未知问题,因为在常规观念里数组是定长的,你可以使用内存分配的方式扩展,但是这种不扩展就使用的方式,担心会覆盖其他内存的数据
#include <stdio.h>void _strcat(char *dst, const char* src){char *tmp = dst;printf("tmp pointer=%p\n", tmp);printf("\ndet pointer=%p\n", dst);printf("det value=%c\n", *dst);while (*dst) {dst++;printf("\ndet pointer=%p\n", dst);printf("det value=%c\n", *dst);};dst--;printf("\n--det pointer=%p\n", dst);printf("--det value=%c\n", *dst);while (*dst) {dst++;*dst = *src;if (*src != '\0') {src++;}printf("\ndet++ pointer=%p\n", dst);printf("det++ value=%c\n", *dst);};}int strlen(const char *str) {int i = 0;while (*str != '\0') {i++;str++;}return i;}void A(char * str) {while (*str) {str++;if (*str == '\0') {printf("当前为\\0\n");}};if (*str == '\0') {printf("当前为\\0\n");*str = 'a';str++;*str = 'a';str++;*str = 'a';str++;*str = 'a';str++;*str = 'a';str++;*str = 'a';str++;}*str = '\0';}int main(){const char *str = "abcde";char str2[] = "1234567890";char str1[] = "1234567890";void _strcat(char *dst, const char* src);void A(char * str);// _strcat(str1, str);char str3[] = "12345";A(str3);printf("string=%s\n", str3);return 0;}
下面的代码会抛出Abort trap: 6,意义是指针越界,但是可以正常指向,并且可以正常扩展数组长度。
#include <stdio.h>void A(int *p) {int *q = p;int i = 0;for (i = 0; i < 5; i += 1) {printf("%d", *p);p++;}*p = 6;p++;*p = 7;p++;*p = 8;p++;for (i = 0; i < 8; i += 1) {printf("%d", *q); // 可以正常输出q++;}printf("\n");}int main(){void A(int *p);int a[] = {1,2,3,4,5};A(a);return 0;}
