一:字符串操作函数的功能及应用
1、strcpy()函数
      Strcpy(字符数组1,字符数组2)此函数是字符串拷贝函数,它的作用是将字符串2复制到字符数组1中去。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	char str1[30] = { "hello world!!!" };
	char str2[30];
	strcpy(str2, str1);
	printf("%s", str2);
	system("pause");
	return 0;
}
2、strcat()函数
     此函数是字符串连接函数,,其一般形式为strcat(字符数组1,字符数组2),作用是将字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值,即字符数组1的地址。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    char str1[30] = { "we are friend " };
    char str2[30]= { "all the time!" };
    printf("%s", strcat(str1,str2));
    system("pause");
    return 0;
}
3、strcmp()
此函数是字符串比较函数,其一般形式为strcmp(字符串1,字符串2)。字符串比较规则是将两个字符串从左至右逐个字符相比,直到出现不同的字符或者遇到’\0’为止。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{   
    char passwd;
    char key[30] = { "abcdef " };
    scanf("%s", &passwd);
    if (strcmp(key, passwd) == 0)
    {
        printf("密码正确\n");
    }
    else
    {
        printf("密码错误\n");
    }
    system("pause");
    return 0;
}
4、strchr()
       此函数功能是查找字符串中首次出现某个字符的位置。,成功返回所查找字符第一次出现的位置,失败返回NULL.
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
    char string[17];
    char *p, c = 'r';
    strcpy(string, "thisisastring");
    p = strchr(string, c);
    if (p)
        printf("字符c的位置在:%s\n", c, p);
    else
    printf("字符c没有找到");
    system("pause");
    return 0;
}
5、strstr()
   #define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    char str[10]="1234xyz";
    char *str1 = strstr(str, "34");
    if (*str1)
    {
        printf("查找成功\n");
    }
    else
    {
        printf("查找失败\n");
    }
    system("pause");
    return 0;
}
6、strlen()
         测字符串长度的函数。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    char str[10]="china";
    printf("%d\n", sizeof(str));
    printf("%d\n", strlen(str));
    system("pause");
    return 0;
}
二:字符串操作函数实现
1、strlen()函数的实现
方法一:
int my_strlen(const char*str)
{
           int length = 0;
           while (*str ++!= '\0')
          {
                   length++;
          }
           return length;
}
方法二:使用指针-指针的方法实现
       使用指针减去指针的方法的条件是:两个指针指向同一数组中的元素。
1:指针减去指针的结果是两个指针之间元素的个数,不是元素的长度。
2:如果两个指针指向两个不同数组的元素, 那么他们之间 相减的结果是未定义的。
int _my_strlen(char * s)
{
           char* p = s ;
           while (*p != '\0' )
                   p++;
           return p - s ;
}
2、strcpy()函数的实现
方法一:
char *strcpy(char *dest,const  char *src )
{
           if ((dest == NULL) || (src == NULL))
          {
                    return NULL;
          }
           char *ret_string = dest ;
           while (*dest ++ = *src++) != ’\0′);
           return ret_string;
}
注:返回char * 指针的原因是为了实现链式表达式,如:
int length = strlen(strcpy(dest, “hello world”));


方法二:
#include <stdio.h>
#include <assert.h>
char* my_strcpy(char *dest, const char * src)
{
           assert(dest != NULL );//assert(dest);
           assert(src);
           char *ret = dest ;

           while (*dest ++ = *src++)
  {
                   ;
          }
           /*while (*src != '\0')
          {
                   *dest++ = *src++;
          }
          *dest = '\0';*/

           return ret;
}
int main()
{
           char arr[20] = "abc" ;
           char p[] = "change world!" ;
           //链式访问
          printf( "%d\n", strlen(strcpy(arr, p)));
          printf( "%s\n", arr);
          system( "pause");
           return 0;
}
3、strcat()函数的实现
char * __cdecl strcat(char * dst, const char * src)
{
           char * cp = dst ;
           while (*cp)
                   cp++;
           while (*cp++ = *src ++);
           return(dst );
}