核心
- strncpy() : 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。
- strncmp() : 比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。
- strncat() : 如果源中C字符串的长度小于num,则只复制到’\0’之前的内容。
实现
char* MyStrncpy(char* dest, const char* src, int num){
assert(dest != NULL && src != NULL);
char* p = dest;
while (num && *src != '\0'){
*dest = *src;
dest++;
src++;
num--;
}
while (num){
*dest = '0';
num--;
dest++;
}
*dest = '\0';
return p;
}
int main () {
char str1[100] = "asd";
char str2[100] = "asda";
int num = 10;
MyStrncpy(str1, str2, num);
return 0;
}
int MyStrncmp(const char* str1, const char* str2, int num){
assert(str1 != NULL && str2 != NULL);
while ((*str1 != '\0' || *str2 != '\0') || num){
if (*str1 - *str2 > 0){
return 1;
}else if (*str1 - *str2 < 0){
return -1;
}
num--;
str1++;
str2++;
}
return 0;
}
int main () {
char str1[100] = "asdaa";
char str2[100] = "asdaa";
int num = 10;
int ret = MyStrncmp(str1, str2, num);
return 0;
}
char* MyStrncat(char* dest, const char* src, int num){
assert(dest != NULL && src != NULL);
char* p = dest;
while (*dest != '\0'){
dest++;
}
while (num && *src != '\0'){
*dest = *src;
dest++;
src++;
num--;
}
*dest = '\0';
return p;
}
int main () {
char str1[100] = "asd";
char str2[100] = "asda";
int num = 10;
MyStrncat(str1, str2, num);
return 0;
}