0.注意转义字符 \开头的,如果是转义字符,则整体转义字符当做一个字符
1.字符串类型的定义
c语言中没有想java那样有String
所以我们用char类型来定义
2.字符串的结束位置
为了确定字符串在内存的结束位置,会在结尾加上反斜杠0 \0
2.1用字符定义字符串
char s[3] = {'l', 'j', 'h'};
printf("%s", s);
char s[4] = {'l', 'j', 'h','\0'};
// 字符串没有加反斜杠0,输出结果有异常 ljh?0
//写了结束符,就不需要写数组的大小,会自动的帮你计算
char s[] = {'l', 'j', 'h','\0'};
2.2用数组定义字符串
char s[] = {"hello,world"} ; // 这样也不用写结束符号,反斜杠0。
3.获取字符串的长度
3.1 strlen()
根据上面的例子可以看出,strlen遍历字符串的长度,是字符串的实际长度,遇到 \0 会停止遍历,即是第一个元素到\0之间元素的个数,不包括 \0
3.2 sizeof()
sizeof() 求的是存储该字符串的变量占用的空间大小,因而一定会包括 \0, 反斜杠0后面的元素也会计算进去。
如果是”sab\0s”这种用sizeof才对。
一般使用strlen()
4.拷贝字符串
4.1 strcpy(strcpy 是依据 \0作为结束判断的)
strcpy(str1,str2)
str1 :是目标数组,
str2:是源数组,
注意: 保证str1有足够的空间存放str2,
char str1[] = "Orginal String";
char str2[] = "New String"; // 字符串后面都是默认有\0结尾的。
4.2 strncpy(用来复制字符串的前n个字符,,停止使用该函数)
strncpy(str1,str2,size)
目标的字符串,源字符串,复制前几个字符
与strcpy不同,strncpy不会依据\0作为结束判断
5.拼接追加字符串
5.1 strcat (用于拼接字符串)
strcat(str1,str2) 将str2拼接到str1后面,str2不变
strcat 的数据类型是 char* 即指向char 的指针
strcat 无法拼接自身的字符串:在第一次循环的时候就自身的‘\0’就已经被第一个元素覆盖了,导致后面找不到’\0’所以无法退出循环,进入了死循环。
可以看到找不到 \0 没法退出
5.2 strncat
如果想要拼接自身的字符串,无法使用strcat,这时可以使用strncat
char arr1[20] = "abcdefg";
int sz = strlen(arr1); // 这里的这个长度是不包括 \0的,所以可以用这个方法来追加自身的字符串
strncat(arr1,arr1,sz);
puts(arr1);
5.3 总结
对于数组的空间如果要追加或者改变的话,就要提前赋予一定的空间大小。以及对于strcat和strncat的搭配运用
6.比较字符串
strcmp与strncmp都是用来比较字符串的,区别在于能否比较指定长度字符串
6.1 strcmp
C/C++函数,比较两个字符串
设这两个字符串为str1,str2,
若str1==str2,则返回零;
若str1 > str2,则返回正数;
若str1< str2,则返回负数。
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。
strcmp(“abcd”,”abcd”)的返回值是 0; 一般的小写的字符返回的是正负1
strcmp(“abcd”,”dcba”)的返回值是 -1;
strcmp(“dcba”,”abcd”)的返回值是 1;
还有一种情况:大写的字符返回的是正负2
strcmp(“A”,”C”)的返回值是 -2;
strcmp(“C”,”A”)的返回值是 2;
这个确切的数值是依赖不同的c的实现
6.2 strncmp
strncmp函数是指定比较size个字符。也就是说,如果字符串s1与s2的前size个字符相同,函数返回值为0。此函数功能即比较字符串str1和str2的前maxlen个字符。如果前maxlen字节完全相等,返回值就=0;在前maxlen字节比较过程中,如果出现str1[n]与str2[n]不等,则依次比较str1和str2的前n位
str1=”ABCDHG”,str2=”ABCDEF”
strncmp(str1,str2,4)的返回值是 0;
strncmp(str1,str2,5)的返回值是 1;