本质是字符数组
#include
int main()
{
//定义字符串的第一种方式,类比整数数组
char str[5] = {'a','b','c','d','e'};
for(int i=0;i
#include
int main() //字符串在内存中,除了有效字符以外,还会自动在后面补一个'\0',作为字符串的结束标志
{
int a[] = {1,2,3}; //整型数组,连续的空间,整个数组的大小是元素个数*元素类型大小
printf("a数组的大小是:%d\n",sizeof(a));
printf("数组的元素大小是:%d\n",sizeof(a[0]));
printf("数组个数:%d\n",sizeof(a)/sizeof(a[0]));
char a2[3] = {'a','b','c'};
printf("a2数组的大小是:%d\n",sizeof(a2));
printf("数组的元素大小是:%d\n",sizeof(a2[0]));
printf("数组个数:%d\n",sizeof(a2)/sizeof(a2[0]));
char a3[3] = "abc";
printf("a3数组的大小是:%d\n",sizeof(a3));
printf("数组的元素大小是:%d\n",sizeof(a3[0]));
printf("数组个数:%d\n",sizeof(a3)/sizeof(a3[0]));
char a4[] = "abc"; //不写数组长度,数组的大小会根据初始化时元素个数来确定
printf("a4数组的大小是:%d\n",sizeof(a4));
printf("数组的元素大小是:%d\n",sizeof(a4[0]));
printf("数组个数:%d\n",sizeof(a4)/sizeof(a4[0])); //结果为4,多了一个字符,原因是 '\0' 代表字符串的结束标志
int i = 0;
while(a4[i] != '\0'){
printf("%c",a4[i]);
i++;
}
return 0;
}
#include
#include
//不能用sizeof来计算字符串中有效字符的个数
//应该用strlen,它在计算字符串大小的时候,遇到'\0'后结束计数
int main()
{
int a[] = {1,2,3};
printf("数组元素的个数是:%d\n",sizeof(a)/sizeof(a[0]));
char a2[128] = "hello";
printf("数组元素的个数是:%d\n",sizeof(a2)/sizeof(a2[0]));
printf("数组中有效元素个数:%d\n",strlen(a2));
return 0;
}
#include
#include
int main()
{
char *str = "hello world";
puts(str);
printf("%s\n",str);
return 0;
}
char str[128] = {'\0'}; 在内存中申请了128byte, 初始化为'\0'
char *pstr :定义了一个指针,存放别的地址,是一个野指针
#include
#include
int main()
{
// char *pstr; 野指针,造成非法内存访问,会出现段错误
//char pstr[128] = {'\0'}; 可行的第一种方法
char *pstr = null;
pstr = (char *)malloc(128); //第二种方法,必须要开辟空间,内存是否合法
printf("请输入字符串:\n");
scanf("%s",pstr);
puts(pstr);
return 0;
}
#include
#include
int main()
{
// char *pstr; 野指针,造成非法内存访问,会出现段错误
//char pstr[128] = {'\0'}; 申请空间;初始化,把每个元素初始化为'\0'
char *pstr = NULL;
pstr = (char *)malloc(128); //1.申请空间 2.一旦用了malloc,一定要注意内存泄露的问题 3.malloc可能会失败要对返回值做判断
if(pstr == NULL){
printf("申请内存失败\n");
exit(-1);
}
memset(pstr,'/0',128); //2.把每一项都初始化为'\0'
//memset函数,有三个参数:初始化对象;初始化成什么字符;多大空间
printf("请输入字符串:\n");
scanf("%s",pstr);
puts(pstr);
return 0;
}
strcpy原型声明:char *strcpy(char* dest, const char *src);
作用:把 src 所指向的字符串复制到 dest。
需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。
#include
#include
int main()
{
char src[40];
char dest[100];
memset(dest,'\0',sizeof(dest));
strcpy(src,"hello");
strcpy(dest,src);
printf("最终的字符串:%s\n",dest);
return 0;
}
strncpy原型声明:char *strncpy(char *dest, const char *src, size_t n)
作用:把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。
有三个参数:
dest -- 指向用于存储复制内容的目标数组。
src -- 要复制的字符串。
n -- 要从源中复制的字符数
#include
#include
int main()
{
char src[40];
char dest[100];
memset(dest,'\0',sizeof(dest));
strcpy(src,"syzdsb");
strncpy(dest,src,6);
printf("最终的字符串:%s\n",dest);
return 0;
}
strcat() 函数的声明:char *strcat(char *dest, const char *src)
作用:把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
有两个参数:
dest:指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串;
src:指向要追加的字符串,该字符串不会覆盖目标字符。
#include
#include
int main()
{
char src[40];
char dest[40];
strcpy(dest,"好好学习");
strcpy(src,"天天向上");
strcat(dest,src);
printf("最终的字符串:%s\n",dest);
return 0;
}
strcmp() 函数的声明:int strcmp(const char *str1, const char *str2)
有两个参数:
str1:进行比较的第一个字符串;
str2:进行比较的第二个字符串
返回值:
若str1 若str1=str2,返回值等于0; 若str1>str2,返回值大于0; strchr() 函数的声明:char *strchr(const char *str, int c) 作用:在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置 有两个参数: str:要被检索的c字符串 c:在str中要搜索的字符 返回值:该函数返回在字符串 str 中第一次出现字符 c 的指针,如果未找到该字符则返回 NULL strstr() 函数的声明:char *strstr(const char *haystack, const char *needle) 作用:在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0' 两个参数: haystack -- 要被检索的 C 字符串; needle -- 在 haystack 字符串内要搜索的小字符串。 返回值:该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null strlwr()函数的声明:char *strlwr(char *str); 作用:将字符串中的字符转换为小写 参数:str:要转换的字符串 返回值:返回转换后的小写字符串,就是将str返回 strupr()函数的声明:char *strupr(char *str) 作用:将字符串中的字符转换为大写 参数:str:要转换的字符串 返回值:返回转换后的大写字符串 strtok() 函数的声明:char *strtok(char *str, const char *delim) 作用:分解字符串 str 为一组字符串,delim 为分隔符 参数: str -- 要被分解成一组小字符串的字符串; delim -- 包含分隔符的 C 字符串; 返回值:该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。#include
8.strchr ——字符串的检索
#include
9.strstr——查找子串
#include
10.strlwr ——转为小写
#include
11.strupr ——转化为大写
#include
12.strtok ——字符串分割
#include