首页 > 技术文章 > C语言 - strcat和strncat的编程实现及总结

goul 2018-09-13 09:19 原文

一、函数strcat与stcncat的函数实现

    1、strcat函数的实现

      要求:

         原型:char * strcat(char *dest, const char *src);
           头文件:#include <string.h>
           功能:1、dest 为目的字符串指针,src 为源字符串指针。strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;
            2、dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL。
        说明:
                返回值:dest 字符串起始地址。

  strcat代码功能的实现

char* MyStrcat(char *dst, const char *src)
{
    assert(dst != NULL && src != NULL); //assert函数的头文件为#include <assert.h>
    char *temp = dst;
    while (*temp != '\0')
        temp++;
    while ((*temp++ = *src++) != '\0');

    return dst;
}

    注意:1、dest 与 src 指针不能为NULL,并且所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串。

       2、assert是用来避免显而易见的错误的,而不是处理异常的。错误和异常是不一样的,错误是不应该出现的,异常是不可避免的。

  

 2、strncat函数的实现

      要求:

         原型:char *strncat(char *dest, const char *src, size_t n);
           头文件:#include <string.h>
           功能:把src所指字符串的前n个字符添加到dest结尾处,覆盖dest结尾处的'/0',实现字符串连接。
        说明:
                返回值:dest 字符串起始地址。
  strncat代码功能的实现
char *strncat_m(char *dest,const char *str,int n)
{
    assert((dest!=NULL)&&(str!=NULL));
    char *cp=dest;
   //移动指针到末尾
    while(*cp!='\0') ++cp;
 
    while(n&&(*cp++=*str++)!='\0')
    {
        --n;
    }
 
    return dest;
}

  注意事项与strcat一致,不过要注意n的取值范围

推荐阅读