字符串:
以(整数)0 结尾的一串字符,可以用'\0'代替。标志字符串的结束,但不是其的一部分,计算字符串长度不包括这个0。
以数组的形式存在,可以以数组or指针的形式访问。
不可以用运算符对字符串做运算,可以以数组的方式遍历。
字符串常量:“hello”,长度加1,两个相邻的字符串常量会自动合并。
字符串变量
char* s = “Hello, world!”;
s是一个指针,初始化为指向一个字符串常量,s是(const) char* s,其所在地址只读
如果需要修改字符串,应该用数组:
char s[ ] = "Hello, world!";
要构造一个字符串-> 数组
要处理一个字符串 -> 指针
字符串输入输出
字符串的赋值?
详见字符串函数
char string[8];
scanf("%s",string);
//scanf读入一个单词(到空格、tab或者回车为之)
//但并不安全,只能读入7个字符,需要写成%7s,表示最多允许读入的字符数量,应该小于n-1
//如果超出有效数量,下一次scanf从多出去的这个开始
printf("%s",string);
常见错误:
只是定义了一个指针变量,可能指向了垃圾值
空字符串:
第一个有效,第二个放不下其他字符了
字符串数组
char a[] [10] 和 char *a[] 前者容易越界
单字符输入输出
putchar
getchar
shell提供行编辑
字符串函数
#inlude <string.h>
strlen
区别于sizeof是数组指向的大小
//strlen:5 sizeof:6
strcmp
每一个字符依次比较,不相等的时候,给出的是差值
strcpy
前者是目的,后者是源
重叠
常用功能:复制一个字符串
🔺注意加一
strcat
从\0开始(覆盖)
安全问题: strcpy和strcat 结尾加个n(最多可以拷贝n个,第三个的意义是只比较前n个字符)
字符串搜索函数
1寻找字符,返回一个指针;
2从右边寻找;
寻找第二个:
存储某字符串以后的内容:
得到某字符前面的内容:
//8 *p所指的是lle
//9 c存放l
//10 把*p的值变成'\0',所以此时s所指的字符串是"he"
//11 分配了一个和当前s一样大小的空间
//12 将这个新的s拷贝到t
(后面要恢复:让*p=c,写回原来的数组)