字符串的拷贝,追加,及结构体中成员变量–数组的赋值
大家好,希望以下示例能帮助到大家。
以下四个函数是C语言库函数,均包含在头文件<string.h>中,使用库函数前必须引用头文件。
- 字符串拷贝:char* strcpy(char* strDestination, const char* strSource);
- 字符串追加:char *strcat( char *strDestination, const char *strSource );
- 字符串比较:int strcmp( const char *string1, const char *string2 );
- 求字符串长度:size_t strlen( const char *string );
- 结构体中成员变量–数组的赋值
一、字符串拷贝–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:
希望能帮助到大家!