C语言中字符串的拷贝strcpy(),追加strcat,比较strcmp(), 求长度strlen(),及结构体中成员变量--数组的赋值

字符串的拷贝,追加,及结构体中成员变量–数组的赋值

大家好,希望以下示例能帮助到大家。
以下四个函数是C语言库函数,均包含在头文件<string.h>中,使用库函数前必须引用头文件。

  1. 字符串拷贝:char* strcpy(char* strDestination, const char* strSource);
  2. 字符串追加:char *strcat( char *strDestination, const char *strSource );
  3. 字符串比较:int strcmp( const char *string1, const char *string2 );
  4. 求字符串长度:size_t strlen( const char *string );
  5. 结构体中成员变量–数组的赋值

一、字符串拷贝–strcpy()

 //字符串拷贝函数--包含头文件<string.h>
 char* strcpy(char* strDestination, const char* strSource);
/*作用:将源字符串strSource拷贝到目标字符串strDestination中,并返回目标字符串的地址
覆盖拷贝, 将strDestination覆盖,变成strSource, 并在结尾自动添加字符串结束标志'\0'
*/
/*两个参数,一个返回值
strDestination: 目标字符串(存放拷贝过来的字符串)
strSource: 源字符串(需要拷贝的字符串)
返回值:返回strDestination的地址
*/

//代码如下
#include <stdio.h>
#include <string.h>

int main()
{
	//将str1的内容复制到str2中
	char str1[15] = "Hello, world!";
	char str2[30] = "hi, Linux! Nice to meet you";
	//拷贝
	char* pstr = strcpy(str2, str1);
	//将str1 的内容拷贝到str2中, str2中原内容直接被覆盖
	printf("str1 = %s\n", str1);
	printf("str2 = %s\n", str2);
	//返回值就是strDestination的地址: str2, 即 str2 == pstr
	printf("pstr = %s\n", pstr);

	//注意:strDestination字符串的内存大小要大于等于strSource字符串内存大小
	//否则目标地址内存不够,编译器将报错
	//例如:将str3拷贝到str4中, str4的大小明显比str3小,无法拷贝
	char str3[15] = "Nice to meet u";
	char str4[5] = "hi!";
	strcpy(str4, str3);
	printf("str3 = %s\n", str3);
	printf("str4 = %s\n", str4);

	return 0;
}

将str1复制到str2中,str2被覆盖。如果str2空间不足,将报错

拷贝成功

目标空间不足,无法拷贝

目标空间不足,无法拷贝

二、字符串追加–strcat()

#include <stdio.h>
#include <string.h>

int main()
{
	//字符串的追加,char *strcat( char *strDestination, const char *strSource );
	//将strSource字符串直接添加到strDestination字符串的末尾
	char str1[30] = "Hello";
	char str2[10] = "World!";
	//将str2追加到str1上, str1空间要足够大
	char* pstr = strcat(str1, str2);
	printf("str1 = %s\n", str1);
	printf("str2 = %s\n", str2);
	//返回值是str1的地址,即pstr == str1
	printf("pstr = %s\n", pstr);

	return 0;
}

字符串追加

在这里插入图片描述

三、字符串比较

在C语言中,使用strcmp(),对字符串进行比较。字符串比较的是每个字符的ASCII码值,从第一位字符开始依次向后比较。
返回值有三种结果:
str1 < str2 返回 -1
str1 > str2 返回 1
str1 = str2 返回 0

#include <stdio.h>
#include <string.h>

int main()
{
	//str1 < str2, 返回值: -1
	//第三位:c的ASCII码值为99, d的ASCII码值为100, c<d, 返回 -1
	char str1[] = "abc";
	char str2[] = "abd";
	int result1 = strcmp(str1, str2);
	printf("比较结果是:%d\n", result1);

	//str1 > str2, 返回值: 1
	//前三位都相等,str3第四位d, str4没有第四位,str3>str4, 返回 1
	char str3[] = "abcd";
	char str4[] = "abc";
	int result2 = strcmp(str3, str4);
	printf("比较结果是:%d\n", result2);

	//str1 == str2, 返回值: 0
	//str5 与 str6 相等返回 0
	char str5[] = "abc";
	char str6[] = "abc";
	int result3 = strcmp(str5, str6);
	printf("比较结果是:%d\n", result3);
	return 0;
}

在这里插入图片描述

四、求字符串长度

strlen( const char *string )返回值是字符串的长度
strlen()计算的是有效长度,即第一个’\0’之前的字符串的长度

#include <stdio.h>
#include <string.h>

int main()
{
	char str1[] = "Hello, word!";
	int length = strlen(str1);	//使用库函数需要包含头文件 #include <string.h>
	printf("字符串的长度是:%d\n", length);

	return 0;
}

在这里插入图片描述

在这里插入图片描述

五、对结构体变量赋值

在 C 语言中,字符数组是一种特殊的数据类型,它不能直接进行赋值操作。你不能使用赋值操作符(=)将一个字符串直接赋给一个字符数组。这是因为 C 语言中的字符数组实际上是一个连续的内存块,用于存储字符串的字符。赋值操作符只能用于简单的数据类型,而不能用于数组。不能直接对结构体成员变量(字符数组类型)赋值。 例如:s1.name = “李四” ,将报错。想要对字符数组赋值需要使用库函数,strcpy()。
代码如下:

#include <stdio.h>
#include <string.h>

//定义结构体
struct Student
{
	char name[21];	//姓名
	char sex[5];	//性别
	int age;		//年龄
};

int main()
{
	//创建结构体变量s1, 并初始化:{张三, 男, 18岁}
	struct Student s1 = { "张三", "男", 18};

	//打印修改前s1各成员变量的值
	printf("修改前:\n姓名:%s, 性别:%s, 年龄:%d\n", s1.name, s1.sex, s1.age);
	
	//修改s1的成员变量name的值为:"李四"
	//s1.name = "李四";	//编译器报错
	strcpy(s1.name, "李四");

	//打印修改后s1各成员变量的值
	printf("修改后:\n姓名:%s, 性别:%s, 年龄:%d\n", s1.name, s1.sex, s1.age);

	return 0;
}

结构体成员变量(字符数组)的赋值

在这里插入图片描述

Ending:
希望能帮助到大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值