C语言字符串函数

  • size_t strlen (char *a)  输出字符串长度(首地址到\0前长度)

     eg:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{	
	char* a1 = "abcde";//5
	char a2[10] = "abcde";//5
	char a3[] = { 'a','b','c','d','e' };//不确定,因为数组里没有\0,不确定会读到多少位才有\0
	printf("a1:%d\n", strlen(a1));
	printf("a2:%d\n", strlen(a2));
	printf("a3:%d\n", strlen(a3));
	return 0;
}

 运行结果:

1. 该函数返回值是无符号整数

eg:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{	
	char* a1 = "abcde";
	char a2[10] = "abcd";
	if (strlen(a2) - strlen(a1) > 0)
	{
		printf(">\n");
	}
	else
	{
		printf("<\n");
	}
	
	return 0;
}

 因为size_t是无符号整数,所以没有复数,最高位是1的数字默认是个值很大正数。


  • strcpy  拷贝字符串函数

        char *strcpy( char *a, const char *b); 将源字符串(b)拷贝到a里,返回目标地址首地址。

``````eg:

#include<stdio.h>
#include<string.h>
int main()
{	
	char a1[20] = "abcde";
	char a2[10] = "abcd";
	printf("%s",strcpy(a1,a2));
	
	return 0;
}

结果:

  1. 调用函数时源字符串必须有\0,因为拷贝是拷贝到\0结束
#include<stdio.h>
#include<string.h>
int main()
{	
	char a1[20] = "abcde";
	char a2[] = {'a','b','c','d','e','f'};
	printf("%s",strcpy(a1,a2));
	
	return 0;
}

        该程序会报错,因为源字符串没有\0

 

     2.源字符串的\0也会被拷贝过去

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{	
	char a1[20] = "aaaaaaaaaaaaaaaaaaa";
	char *a2 = "abcd";
	printf("%s",strcpy(a1,a2));
	
	return 0;
}

 

 

     3.目标空间必须要够大

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{	
	char a1[5] = "abc";
	char *a2 = "abcdefghijk";
	printf("%s",strcpy(a1,a2));
	
	return 0;
}

目标空间长度是5,源字符串长度是11,程序会报错

 

  4.目标空间必须可用

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{	
	char *a1 = "abc";
	char *a2 = "abcdefghijk";
	printf("%s",strcpy(a1,a2));
	
	return 0;
}

因为a1指向的是常量,不是变量,所以不能修改,此时程序会报错。        


  • strcat 给俩字符串连接起来

       char *strcat( char *a, const char *b );字符串b连接到a之后,返回a的首地址

      eg:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{	
	char a1[100] = "abc";
	char *a2 = "abcdefghijk";
	printf("%s",strcat(a1,a2));
	
	return 0;
}

  1.  源字符串必须以\0结束,要不然不知道从哪儿开始加b的字符
  2. 目标空间必须足够大
  3. 目标空间要可修改

  • strcmp 比较两个字符串,注意不是比较两个字符串长度,是比较字符串对应位置上字符大小,相同就比较下一个,知道遇到不同或者遇到\0

        int strcmp( const char *a, const char *b ); 如果a>b,返回值小于0,a<b,返回值大于0,a==b,返回值等于0。

eg:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{	
	char a1[100] = "abc";
	char a2[100] = "abcdefghijk";
	printf("%d\n",strcmp(a1,a2));
	printf("%d\n", strcmp(a2, a1));
	printf("%d\n", strcmp(a2, a2));

	
	return 0;
}

运行结果:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值