strcpystrcatstrstr的实现
Posted htj10
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了strcpystrcatstrstr的实现相关的知识,希望对你有一定的参考价值。
参考:www.cnblogs.com/carsonzhu/p/5277036.html
字符串拷贝函数strcpy的原型:
char *strcpy(char *strDest,const char *strSrc);
strcpy函数将strSrc拷贝至输出参数strDest中,同时函数的返回值又是strDest。这样做并非多此一举,可以获得如下灵活性:
char str[20];
int length = strlen( strcpy(str, “Hello World”) );
作用:为了生成链式表达式。
在面试中常会遇到写 strcpy,以及相关的问题,比如说返回值的作用等。
char * strcpy( char *strDest, const char *strSrc ) { assert( (strDest != NULL) && (strSrc != NULL) ); char *address = strDest; while( (*strDest++ = * strSrc++) != ‘\\0‘ ); return address; } char * strcpy(char* dst,const char* src) { assert((dst!=NULL)&&(src!=NULL)); char* cp=dst; while(*src!=‘\\0‘) { *dst=*src; src++; dst++; } *dst=‘\\0‘; return cp; } char* strcat ( char * dst , const char * src ) { char * cp = dst; while( *cp ) cp++; /* find end of dst */ while(*src!=‘\\0‘) { *cp++=*src++; } *cp=‘\\0‘; return dst; /* return dst */ } int strcmp(const char* str1, const char* str2) { int ret = 0; while(!(ret=*(unsigned char*)str1-*(unsigned char*)str2) && *str1) { str1++; str2++ } if (ret < 0) { return -1; } else if (ret > 0) { return 1; } return 0; } char *strstr( const char *s1, const char *s2 ) { int len2; if ( !(len2 = strlen(s2)) ) return (char *)s1; for ( ; *s1; ++s1 ) { if ( *s1 == *s2 && strncmp( s1, s2, len2 )==0 ) return (char *)s1; } return NULL; }
要注意内存重叠时的问题。
strcat:将两个char类型连接
char d[20]="GoldenGlobal"; char *s="View"; strcat(d,s);
结果放在d中
printf("%s",d);
输出 d 为 GoldenGlobalView (中间无空格)
d和s所指内存区域不可以重叠且d必须有足够的空间来容纳s的字符串。
返回指向d的指针。
strcmp:比较两个字符串str1和str2
若str1=str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。
strstr:strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
以上是关于strcpystrcatstrstr的实现的主要内容,如果未能解决你的问题,请参考以下文章
ASP.net MVC 代码片段问题中的 Jqgrid 实现