1.strcat函數功能實現
?
char* mystrcat(char* dest, const char* src)
{assert(dest);assert(src);char* ret = dest;//找到目標空間里面的斜杠0的位置,再追加while (*dest != '\0'){dest++;}while ((*dest++ = *src++)){;}return ret;
}
int main()
{char arr1[20] = "hello";char arr2[] = "world";mystrcat(arr1, arr2);printf("%s\n", arr1);return 0;
}?
(1)這個函數的作用就是實現字符串的追加,把一個加到另外一個上面;
(2)這個函數的返回值是目標處的地址,因為這個過程指針在移動變化,所以我們在最開始的時
候就定義指針變量ret記錄初始時候的位置,最后返回ret;
(3)第一個循環就是一直到找到斜杠0才停止;
第二個循環就是讓指針后移,并且在移動的同時,實現對應位置的賦值;
(4)當移動到斜杠0的時候,就會因為斜杠0等于斜杠0的賦值,是的表達式的結果是0,循環結束;
(5)這個函數不能自己拼接自己,因為如果自己拼接的話,這種情況下2個指針指向的位置是相同
的,dest向右移動的時候,src也向右移動,但是src指針永遠不會找到斜杠0進行終止循環,因為斜
杠0已經被覆蓋掉了,超出范圍以后會造成程序的崩潰;這里不能實現的主要癥結就是2個指針指向
同一位置;?
2.strcmp函數功能實現
(1)第一個字符串大,返回大于0的數;
(2)第二個字符串大,返回小于0的數;
(3)2個字符串相等,返回0;
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{int ret = 0;assert(str1 != NULL);assert(str2 != NULL);while (*str1 == *str2){if (*str1 == '\0')return 0;str1++;str2++;}return *str1 - *str2;
}int main()
{char arr1[20] = "abcdef";char arr2[20] = "acdef";int ret = my_strcmp(arr1, arr2);printf("%d\n", ret);return 0;
}
這里返回指針相減,也就是相差字符的個數,是符合條件的。