仅仅靠自己的理解写了一些简单的用法
1.strcpy (arr1,arr2)将arr2拷贝进arr1,源字符必须包含\0;
下面是vs中的源代码
int __cdecl strcmp (
const char * src,
const char * dst
)
{
int ret = 0 ;
while((ret = *(unsigned char *)src - *(unsigned char *)dst) == 0 && *dst)
{
++src, ++dst;
}
return ((-ret) < 0) - (ret < 0); //
}
2.strcat (arr1,arr2)将arr2的数据追加进arr1;
char * __cdecl strcat (
char * dst,
const char * src
)
{
char * cp = dst;
while( *cp )
cp++;
while((*cp++ = *src++) != '\0') ;
return( dst );
}
3.strcmp (arr1,arr2),比较arr1和arr2的大小,(首字符ascll的大小),如果相等就比较下一对;
int __cdecl strcmp (
const char * src,
const char * dst
)
{
int ret = 0 ;
while((ret = *(unsigned char *)src - *(unsigned char *)dst) == 0 && *dst)
{
++src, ++dst;
}
return ((-ret) < 0) - (ret < 0);
}
4.strncpy(arr1,arr2,n)将aar2中的n个字符拷贝进arr1;
char * __cdecl strncpy (
char * dest,
const char * source,
size_t count
)
{
char *start = dest;
while (count && (*dest++ = *source++) != '\0')
count--;
if (count)
while (--count)
*dest++ = '\0';
return(start);
}
5.strncat(arr1,arr2,n)将arr2中的n个字符追加;
char * __cdecl strncat (
char * front,
const char * back,
size_t count
)
{
char *start = front;
while (*front++)
;
front--;
while (count--)
if ((*front++ = *back++) == 0)
return(start);
*front = '\0';
return(start);
}
6.strncmp(arr1,arr2,n)字符串比较,比较前n个字符串;
int __cdecl strncmp
(
const char *first,
const char *last,
size_t count
)
{
size_t x = 0;
if (!count)
{
return 0;
}
if( count >= 4 )
{
for (; x < count-4; x+=4)
{
first+=4;
last +=4;
if (*(first-4) == 0 || *(first-4) != *(last-4))
{
return(*(unsigned char *)(first-4) - *(unsigned char *)(last-4));
}
if (*(first-3) == 0 || *(first-3) != *(last-3))
{
return(*(unsigned char *)(first-3) - *(unsigned char *)(last-3));
}
if (*(first-2) == 0 || *(first-2) != *(last-2))
{
return(*(unsigned char *)(first-2) - *(unsigned char *)(last-2));
}
if (*(first-1) == 0 || *(first-1) != *(last-1))
{
return(*(unsigned char *)(first-1) - *(unsigned char *)(last-1));
}
}
}
for (; x < count; x++)
{
if (*first == 0 || *first != *last)
{
return(*(unsigned char *)first - *(unsigned char *)last);
}
first+=1;
last+=1;
}
return 0;
}
7.strstr (p1,p2);在p1里面找p2,找不到返回NULL,找得到返回该字符串的地址;
char * __cdecl strstr (
const char * str1,
const char * str2
)
{
char *cp = (char *) str1;
char *s1, *s2;
if ( !*str2 )
return((char *)str1);
while (*cp)
{
s1 = cp;
s2 = (char *) str2;
while ( *s2 && !(*s1-*s2) )
s1++, s2++;
if (!*s2)
return(cp);
cp++;
}
return(NULL);
}
8.strtok
char* strtok(char*str,const char* sep),切割函数,用sep里面的函数切割str里面的函数
9.streeor(errno)翻译出错误信息,每种错误类型都有相应的代码
仅仅是初学字符串函数一些粗略的笔记,有不对的地方可指正出来