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