strcpy、strcat函数源码,strncpy,strncat,strncmp,strtok

来源:互联网 发布:小甲鱼python视频教程 编辑:程序博客网 时间:2024/05/21 17:37
已知strcpy函数的原型是:     char * strcpy(char * strDest,const char * strSrc);    其中strDest是目的字符串,strSrc是源字符串。   strcpy能把strSrc的内容复制到strDest1.不调用库函数,实现strcpy函数。 2.解释为什么要返回char *。

strcpy函数实现:

char *my_strcpy(char *dst,const char *src)  {      assert(dst != NULL);      assert(src != NULL);      char *ret = dst;      while((* dst++ = * src++) != '\0')           ;      return ret;  }  

(2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?

答:为了实现链式表达式。

例如 int length = strlen( strcpy( strDest, “hello world”) );

strcat函数作用是指把第二个字符串的所有元素追加到第一个字符串的尾部。
声明:extern char* strcat(char , const char ); [string.h]
[string.c]

char *  strcat (char *dest, const char *src)  {    //通过strcpy来实现strcat函数    strcpy (dest + strlen (dest), src);    return dest;  }  

strncpy: 把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。
如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束;
如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。

char * my_strncpy( char * dest, const char * source, int count ){   char *p = dest;   while (count && (*p++ = *source++)) count--;   while(count--)      *p++ = '\0';   return(dest);}int main(){   char a[20];   puts(my_strncpy(a,"ammana_babi",15));   system("pause");   return 0;}

1、strtok函数
函数原型:char * strtok (char str, const char delimiters);
参数:str,待分割的字符串(c-string);delimiters,分割符字符串。
该函数用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串中包含的所有字符。当strtok()在参数s的字符串中发现参数delimiters中包涵的分割字符时,则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针。
需要注意的是,使用该函数进行字符串分割时,会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。第一次分割之后,原字符串str是分割完成之后的第一个字符串,剩余的字符串存储在一个静态变量中,因此多线程同时访问该静态变量时,则会出现错误。
很显然下面这个函数和其他都不同
snprintf(char *dest, size_t size,const char *format,…) 按指定的SIZE格式化输出字符串到指定的缓冲区

//int snprintf(char restrict buf, size_t n, const char restrict format, …);
函数说明:最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n 的话,将不会溢出。
函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值。

0 0
原创粉丝点击