研究C语言,首先要明白其库函数…
001 | #include<stdio.h> |
002 | char * strcpy ( char * dest, const char * src); //字符串拷贝 |
003 | char * strcat ( char * dest, const char * src); //字符串连接,返回dest字符串 |
004 | char * strncat ( char * dest, const char * src, int size); //把src前n个字符串连接到dest,返回dest字符串 |
005 | int strcmp ( const char * src1, const char * src2); //字符串比较 返回值: 1:> 0:= -1< |
006 | int strncmp ( const char * src, const char * dst, int size); //dst前n个字符和src比较返回值: 1:> 0:= -1< |
007 | int strlen ( const char * src); //返回字符串长度 |
008 | char * strchr ( const char * src, int ch); //字符ch在字符串第一次出现的位置,返回出现字符ch位置开始到字符串结束位置的指针 |
009 | char * strrchr ( const char * src, int ch); //字符ch在字符串最后一次出现的位置,返回出现字符ch位置开始到字符串结束位置的指针 |
010 | char * strstr ( const char * src, const char * sub); //字符串sub在字符串第一次出现的位置,返回出现字符串sub位置开始到字符串结束位置的指针 |
011 | //memery copy operate function==================// |
012 | void * memcpy ( void * dest, const void * src,unsigned int size); //把src的内容拷到dest内存里去,并返回dest指向的内存地址 |
013 | void * memset ( void * dst, int ch, unsigned int size); //把dst内存中的size大小用使用ch来初始化,并返回dest指向的内存地址 |
014 | int memcmp ( const void * src1, const void * src2, unsigned int size); //比较内存中src1与src2中的前size 个字符是否相等,1:> 0:= -1< (see strncmp(const char*,const char*,unsigned int)) |
015 | void * memchr ( const void * dst, int ch, unsigned int size); //在内存中的某一范围内,查找特定的字符ch,并返回指向ch的指针 |
016 | void * memmove ( void * dst, const void * src, unsigned int size); //memmove()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址上。不同的是,当src和dest所指的内存区域重叠时,memmove()仍然可以正确的处理,不过执行效率上会比使用memcpy()略慢些.返回指向dest的指针 |
017 | //memery copy operate function==================// |
018 | int main() |
019 | { |
020 | // printf("the string len=%d/n",strlen("helloWorld")); |
021 | // char dest[20]; |
022 | // printf("the string is=%s/n",strcpy(dest,"helloWorld")); |
023 | // char dest[30]="hello--"; |
024 | // printf("after connect sub string is=%s/n",strcat(dest,"world")); |
025 | // char dest[30]="hello--"; |
026 | // printf("after connect sub string is=%s/n",strncat(dest,"world_programe",4)); |
027 | // printf("the string compare result is=%d/n",strcmp("hello","aello")); |
028 | // printf("the string compare result is=%d/n",strncmp("hello","hello_good",5)); |
029 | // printf("the char appear position is=%s/n",strchr("hello-r-es-d",'-')); |
030 | // printf("the char appear position is=%s/n",strrchr("hel*lo-r*-e*s-d",'*')); |
031 | // printf("the sub string is=%s/n",strstr("hello_world","lo")); |
032 | char dest[20]; |
033 | // printf("the sub string is=%s/n",memcpy(dest,"hello..111",sizeof(dest))); |
034 | printf ( "the sub string is=%s/n" , memset (dest, '0' , sizeof (dest))); |
035 | return 0; |
036 | } |
037 | //=========================================================// |
038 | int strlen ( const char * src) |
039 | { |
040 | const char * p=src; |
041 |
|
042 | return p-src; |
043 | } |
044 | //=========================================================// |
045 | char * strcpy ( char * dest, const char * src) |
046 | { |
047 | if (dest&&src) |
048 | { |
049 | int i=0; |
050 | while ((*(dest+i)=*(src+i))!= '/0' ) i++; |
051 | *(dest+i)= '/0' ; |
052 | // return dest; |
053 | } |
054 | return dest; |
055 | } |
//微软源码
char * __cdecl strcpy(char * dst, const char * src)
{
char * cp = dst;
while( *cp++ = *src++ )
; /* Copy src over dst */
return( dst );
}
{
char * cp = dst;
while( *cp++ = *src++ )
; /* Copy src over dst */
return( dst );
}
//
056 | //=========================================================// |
057 | char * strcat ( char * dest, const char * src) |
058 | { |
059 | if (dest&&src) |
060 | { |
061 | int len= strlen (dest); |
062 | // printf("len=%d/n",len); |
063 | int i=0; |
064 | while ((*(dest+len+i)=*(src+i))!= '/0' ) i++; |
065 | *(dest+len+i)= '/0' ; |
066 | } |
067 | return dest; |
068 | } |
069 | //=========================================================// |
070 | char * strncat ( char * dest, const char * src, int size) |
071 | { |
072 | if (dest&&src) |
073 | { |
074 | int len= strlen (dest); |
075 | int i=0; |
076 | while ((i<size)&&((*(dest+len+i)=*(src+i))!= '/0' )) i++; |
077 | } |
078 | return dest; |
079 | } |
080 | //=========================================================// |
081 | int strcmp ( const char * src1, const char * src2) |
082 | { |
083 | int equal; |
084 | int i=0; |
085 | while (!(equal=*(unsigned char *)(src1+i)-*(unsigned char *)(src2+i))&&(*(src1+i))&&(*(src2+i))) |
086 | i++; |
087 | if (equal<0) return -1; |
088 | else if (equal>0) return 1; |
089 | else return 0; |
090 | } |
int strcmp(char *str1,str2)
{
char *p1,*p2;
p1=str1;
p2=str2;
while(*p2 && *p1)
if(*(p1++)- *(p2++) )return *(p1++)- *(p2++) ;
return 0;
}
{
char *p1,*p2;
p1=str1;
p2=str2;
while(*p2 && *p1)
if(*(p1++)- *(p2++) )return *(p1++)- *(p2++) ;
return 0;
}
091 | //=================比较两个字符串前size 个字符串是否相等==========================// |
092 | int strncmp ( const char * src1, const char * src2, int size) |
093 | { |
094 | int equal; |
095 | int i=0; |
096 | while ((i<size)&&!(equal=*(unsigned char *)(src1+i)-*(unsigned char *)(src2+i))&&(*(src1+i))&&(*(src2+i))) |
097 | i++; |
098 | if (equal<0) return -1; |
099 | else if (equal>0) return 1; |
100 | else return 0; |
101 | } |
102 | //=========================================================// |
103 | char * strchr ( const char * src, int ch) |
104 | { |
105 | int i=0; |
106 | while (*(src+i)&&(*(src+i)!=ch)) i++; |
107 | return ( char *)(src+i); |
108 | } |
109 | //=========================================================// |
110 | char * strrchr ( const char * src, int ch) |
111 | { |
112 | int len= strlen (src); |
113 | int i=0; |
114 | while (i<len&&(*(src+len-i)!=ch)) i++; |
115 | return ( char *)(src+(len-i)); |
116 | } |
117 | //=========================================================// |
118 | char * strstr ( const char * src, const char * sub) |
119 | { |
120 | if (src&&sub) |
121 | { |
122 | int subLen= strlen (sub); |
123 | int srcLen= strlen (src); |
124 | int nomatch=1; |
125 | int fds=srcLen-subLen+1; |
126 | int i=0; |
127 | if (fds>0) //find counts in the string |
128 | while ((nomatch= strncmp (src+i,sub,subLen))&&fds--) //把当前src的指针往后推,直到找到与sub指针相同为止 |
129 | i++; |
130 | if (nomatch) |
131 | return 0; |
132 | else |
133 | return ( char *)(src+i); |
134 | } |
135 | return 0; |
136 | } |
137 | //====================memory operate=====================================// |
138 | //====================memory operate=====================================// |
139 | void * memcpy ( void * dest, const void * src,unsigned int size) |
140 | { |
141 | if (dest&&src&&size>0) |
142 | { |
143 | int i=0; |
144 | unsigned char * p=(unsigned char *)dest; |
145 | unsigned char * q=(unsigned char *)src; |
146 | while ((i<size)&&(*(p+i)=*(q+i))) |
147 | i++; |
148 | return dest; |
149 | } |
150 | return 0; |
151 | } |
152 | //=========================================================// |
153 | void * memset ( void * dst, int ch, unsigned int size) |
154 | { |
155 | int i=0; |
156 | unsigned char * p=(unsigned char *)dst; |
157 | while ((i<size)&&(*(p+i)=ch)) |
158 | i++; |
159 | return dst; |
160 | } |
161 | //=========================================================// |
162 | int memcmp ( const void * src1, const void * src2, unsigned int size) |
163 | { |
164 | } |
165 | //=========================================================// |
166 | void * memchr ( const void * dst, int ch, unsigned int size) |
167 | { |
168 | } |
169 | void * memmove ( void * dst, const void * src, unsigned int count) |
170 | { |
171 | void * ret = dst; |
172 | if (dst <= src || ( char *)dst >= (( char *)src + count)) |
173 | { |
174 | while (count--) |
175 | { |
176 | *( char *)dst = *( char *)src; |
177 | dst = ( char *)dst + 1; |
178 | src = ( char *)src + 1; |
179 | } |
180 | } |
181 | else |
182 | { |
183 | dst = ( char *)dst + count - 1; |
184 | src = ( char *)src + count - 1; |
185 | while (count--) |
186 | { |
187 | *( char *)dst = *( char *)src; |
188 | dst = ( char *)dst - 1; |
189 | src = ( char *)src - 1; |
190 | } |
191 | } |
192 | return (ret); |
193 | } |