c标准库函数实现源码

  • 格式:docx
  • 大小:18.55 KB
  • 文档页数:3

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

c标准库函数实现源码

1)字符串拷贝

1.char * strcpy( char *strDest, const char *strSrc )

2.{

3.if(strDest == strSrc) { return strDest; }

4. assert( (strDest != NULL) && (strSrc != NULL) );

5.char *address = strDest;

6.while( (*strDest++ = * strSrc++) != '/0' );

7.return address;

8.}

1.//字串末尾要加结束符'/0',不然输出错位结果

2.char *strncpy(char *strDes, const char *strSrc, unsigned

int count)

3.{

4. assert(strDes != NULL && strSrc != NULL);

5.char *address = strDes;

6.while (count-- && *strSrc != '/0')

7. *strDes++ = *strSrc++;

8. *strDes = '/0';

9.return address;

10.}

2)字符串比较

1.int strcmp(const char *s, const char *t)

2.{

3. assert(s != NULL && t != NULL);

4.while (*s && *t && *s == *t)

5. {

6. ++ s;

7. ++ t;

8. }

9.return (*s - *t);

10.}

11.

12.i nt strncmp(const char *s, const char *t, unsigned int co

unt)

13.{ assert((s != NULL) && (t != NULL));

14.while (*s && *t && *s == *t && count --)

15. { ++ s; ++ t; }

16.return (*s - *t);

17.}

3)字符串连接

1.char *strcat(char *strDes, const char *strSrc)

2.{

3. assert((strDes != NULL) && (strSrc != NULL));

4.char *address = strDes;

5.while (*strDes != '/0')

6. ++ strDes;

7.while ((*strDes ++ = *strSrc ++) != '/0')

8. NULL;

9.return address;

10.}

1.char *strncat(char *strDes, const char *strSrc, unsigned

int count)

2.{

3. assert((strDes != NULL) && (strSrc != NULL));

4.char *address = strDes;

5.while (*strDes != '/0')

6. ++ strDes;

7.while (count -- && *strSrc != '/0' )

8. *strDes ++ = *strSrc ++;

9. *strDes = '/0';

10.return address;

11.}

4)字符串长度

1.int strlen(const char *str)

2.{

3. assert(str != NULL);

4.int len = 0;

5.while (*str ++ != '/0')

6. ++ len;

7.return len;

8.}

5)字符串匹配

1.char *strstr(const char *strSrc, const char *str)

2.{

3. assert(strSrc != NULL && str != NULL);

4.const char *s = strSrc;

5.const char *t = str;

6.for (; *strSrc != '/0'; ++ strSrc)

7. {

8.for (s = strSrc, t = str; *t != '/0' && *s == *t;

++s, ++t)

9. NULL;

10.if (*t == '/0')

11.return (char *) strSrc;

12. }

13.return NULL;

14.}

6)内存块复制

1.void *memcpy(void *dest, const void *src, unsigned int co

unt)

2.{

3. assert((dest != NULL) && (src != NULL));

4.void *address = dest;

5.while (count --)

6. {

7. *(char *) dest = *(char *) src;

8. dest = (char *) dest + 1;

9. src = (char *) src + 1;

10. }

11.return address;

12.}

7)内存块赋值初始化

1.void *memset(void *str, int c, unsigned int count)

2.{

3. assert(str != NULL);

4.void *s = str;

5.while (count --)

6. {

7. *(char *) s = (char) c;

8. s = (char *) s + 1;

9. }

10.return str;

11.}

相关主题