#include<stdio.h>
#include<assert.h>
#include<windows.h>
int my_strncmp(char* dest, const char* src, int num){
int ret = 0;
assert(dest!=NULL);
assert(src!=NULL);
while (!(ret=*(unsigned char*)src-*(unsigned char*)dest)&& *dest){
++dest;
++src;
}
if (ret<0){
ret = 1;
}
else if (ret>0){
ret = -1;
}
return ret;
}
int main(){
char* dest = "abcde";
char* src = "abcdf";
printf("%d\n", my_strncmp(dest,src,4));
system("pause");
return 0;
}
while(!(ret=*(unsigned char *)src-*(unsigned char *)dest) && *dest)
(1)先对src及dest进行类型转换,本来是char*src 转换为unsigned char* src型,然后进行解引用
(2)src与dest相减,得到ret,若两个字符串在此时是相等的,必然为0
(3)对ret进行取反,值不为0,因为dest与src相等(只需比较一个即可)