文章目录
前言
本文章总结于此视频
一.字符串介绍:
字符串常量:“AAAA”
字符数组的几种写法:
初识化字符的每个元素
char str1[10] = {'1','2','3','\0'};
可以不写元素个数,编译器会自己计算
char str2[] = {'1','2','3','\0'};
使用字符串常量初识化字符数组
char str3[] = {"AAAA"};
使用字符串常量初识化字符数组,可以去掉大括号。
char str3[] = "AAAA";
二、字符串处理函数介绍:
获取字符串长度:strlen函数
strlen函数(string length)的作用是用于返回字符串结束标志‘\0’之前出现的字符个数,
因此,strlen函数处理的字符串对象必须是以结束标志‘\0’结尾的字符串。其返回值类型是size_t类型,也就是无符号类型。
strlen函数就表示字符串中字符的个数,但不包含’\0’
sizeof 会包括
#define _CRT_SECURE_NO_WARNINGS
#include<stdbool.h>
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "AAAAA";
printf("sizeof str = %d\n", sizeof(str1));
printf("strlen str = %d", strlen(str1));
return 0;
}
运行如下:
拷贝字符串:strcpy函数
- strcpy函数(string copy)的作用是:可以将字符串从源地址复制到目的地址,通俗来讲就是用来实现字符串的复制和拷贝。
- 并且它会将源地址内的结束标志‘\0’一并拷贝过去,因此源地址必须以‘\0’一并拷贝过去,因此源地址必须以‘\0’结尾,且目的地址也将以结束标识符结尾 。
- 而且,因为其作用拷贝字符串,因此目标地址的空间必须足够大,必须有足够大的空间容纳下源地址内字符串,同时目的地址的空间必须是可变的,可修改的。VS编译时,如果空间不足还是可以正常输出,但是会有栈区破坏的警告
————————————————————
#define _CRT_SECURE_NO_WARNINGS
#include<stdbool.h>
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "HELO WORLD";
char str2[] = "HEHE";
char str3[100];
strcpy(str1, str2);
strcpy(str3, " AAAAA");
printf("str1:%s\n", str1);
printf("str2:%s\n", str2);
printf("str3:%s\n", str3);
return 0;
}
拷贝字符串:strncpy
其与strcpy的区别就是拷贝时不会拷贝\0,要自己设置
char str[n] = '\0';
正确代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdbool.h>
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "TO be or not to be";
char str2[40];
strncpy(str2, str1, 5);
str2[5] = '\0';
printf("str2: % s\n", str2);
return 0;
}
当不写’\0‘,时就会报错:
#define _CRT_SECURE_NO_WARNINGS
#include<stdbool.h>
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "TO be or not to be";
char str2[40];
strncpy(str2, str1, 5);
printf("str2: % s\n", str2);
return 0;
}
strcmp函数
1.trcmp函数(string compare)的作用是:按照顺序依次比较两字符串对应位置字符的ASCII码值(注意不是比较两字符串的长度哦),直到结束标识符‘\0’或对应位置的字符不同。
2.若比较到结束标识符都没有不同则字符串相等,若两字符串对应位置字符有不同,谁的ASCII码值小,那个ASCII码值小的字符比较小。
————————————————————————————
以下为举例:
#define _CRT_SECURE_NO_WARNINGS
#include<stdbool.h>
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "AAAAA";
char str2[] = "AAAAA";
if (!strcmp(str1, str2))
{
printf("两个字符串完全一致!");
}
else
{
printf("两个字符串不完全一致!");
}
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdbool.h>
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "AAAAA";
char str2[] = "aaaaa";
if (!strcmp(str1, str2))
{
printf("两个字符串完全一致!");
}
else
{
printf("两个字符串不完全一致!");
}
return 0;
}