- 前言
- 一、模拟实现strncpy
- 二、模拟实现strncat
- 三、模拟实现atoi
- 看完记得给个三连,谢谢
前言
这是我对库函数的模拟实现,希望对大家有帮助。
一、模拟实现strncpy
#include#include //“简洁”版 char* my_strncpy(char* strDest, const char* strSource, size_t count) { assert(strDest && strSource); const char* tmp_strDest = strDest; while ((*strDest++ = *strSource++) != ' ' && count--); while ((--count) || (*strDest++ = ' ')); return tmp_strDest; } //正常版 char* my_strncpy(char* strDest, const char* strSource, size_t count) { assert(strDest && strSource); const char* tmp_strDest = strDest; while (*strSource && count) { *strDest++ = *strSource++; count--; } while (count--) *strDest++ = ' '; return tmp_strDest; }
二、模拟实现strncat
//“简洁”版
//char* my_strncat(char* strDest, const char* strSource, size_t count)
//{
// assert(strDest && strSource);
// char* tmp_strDest = strDest;
// while (*++strDest);
// while ((count--) && (*strDest++ = *strSource++));
// return tmp_strDest;
//}
//正常版
char* my_strncat(char* strDest, const char* strSource, size_t count)
{
assert(strDest && strSource);
char* tmp_strDest = strDest;
while (*strDest)
strDest++;
while (count && *strSource)
{
*strDest++ = *strSource++;
count--;
}
return tmp_strDest;
}
三、模拟实现atoi
#include#include #include #include #include enum State { VALID, INVALID }state = INVALID; int my_atoi(char* str) { assert(str); int flag = 1; long long ret = 0; state = INVALID; while (isspace(*str)) str++; if (*str == ' ') return 0; if (*str == '+') { str++; } else if (*str == '-') { flag = -1; str++; } while (isdigit(*str)) { ret = ret * 10 + flag * (*str - '0'); if ((ret > INT_MAX) || (ret < INT_MIN)) return 0; str++; } if (*str == ' ') { state = VALID; return (int)ret; } return (int)ret; }
看完记得给个三连,谢谢



