1.字符串就是字符数组
- 和整形一样......int data[ ] = {1,2,3,4,5}
-
和整型数组一个道理......char str[ ] = {'h','e','l','l','0'}
-
改进......char str[ ] = "hello"
-
一般用char *p =“hello”
-
char str[ ] = "hello"与char *p =“hello”的区别,char str[ ]是字符串变量,可以被修改,char *p =“hello”是字符串常量,不允许被修改,
2.整形数组和字符数组的区别
字符数组结束是后面有个\0占一位 ,字符数组多一位
3.sizeof和strlen的区别
strlen计算有效字符的长度
4.动态开辟字符串
5.几种字符串常用的API
- 输出字符串:puts()、printf("%s",p)
- 获取字符串:scanf("%s",p)、gets----char * gets ( char * str )-----因为本函数可以无限读取,易发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值
- 计算长度:strlen
- 拷贝:strcpy----char *strcpy(char* dest, const char *src)、strncpy---char *strncpy(char *dest, const char *src, int n)
- 断言:assert
- 拼接:strcat---char *strcat(char *dest, const char *src)---把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面(删除*dest原来末尾的“\0”)。要保证*dest足够长,以容纳被复制进来的*src。*src中原有的字符不变。返回指向dest的指针。
- 比较:strcmp---int strcmp(const char *s1,const char *s2)---若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数、strncmp---int strncmp ( const char * str1, const char * str2, size_t n )---功能是把 str1 和 str2 进行比较,最多比较前 n 个字节,若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 小于s2,则返回小于0的值。
- 查找字符:strchr---char *strchr(const char *str, int c)---在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置
- 查找子串:strstr---char *strstr(char *str1, const char *str2)---返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL
- 字符串分割:strtok---char *strtok(char *str, const char *delim)---分解字符串 str 为一组字符串,delim 为分隔符,特别要注意分割处理后原字符串 str 会变,原字符串的改动是切分符原位置均更改为 '\0'