1、字符串与指针
C语言中,没有字符串这个类型(C++,java.... 有字符串类型:string)。
C语言中字符串是可以用之前的字符数组表示,更多的用字符指针表示
字符串:
是用 "" 引起来的一串字符,比如 "hello,world!",
"" 引起来的字符串,末尾默认有一个'\0'(字符串结束标志,ascii 是 0).
因为我们可以从首地址开始,一个一个的字符往后找,直到遇见'\0',
'\0'之前的字符就是组成字符串的所有字符
所以我们是不是可以保存字符串的首地址,就相当于保存整个字符串
C语言中用 "" 引起的字符串是保存在 .rodata(read only data) 的内存区域里面,
(字符数组初始化时,""字符串除外,字符数组初始化时""的字符串放在,存在 栈区)。
例:
char * p = "hello,world!";// 字符指针变量 p 保存了字符串第0个字符 'h' 的地址
// 字符串首地址
执行这一行,操作系统会分多少字节? 21个字节
(1) p 是一个指针变量 8字节
(2) "hello,world!" 字符串 13个字节
分析:
char s[] = "hello,world!";
char * s2 = "hello,world!";
sizeof(s);----> 13求数组 s 的大小
sizeof(s2);----> 8求指针变量 s2 的大小
strlen(s);----> 12求字符串 s 的长度
strlen(s2); ----> 12求字符串 s2 的长度
*(s2 + 3) = 'o';// 错的 s2 字符串不可写
*(s + 3) = 'o';// 相当于 s[3] = 'o';
s++;// s = s + 1; 指针常量 不可修改
*s = 's';
s2++;// 修改 指针变量 s2 的值 , 没问题
*s2 = 's';// 错的 s2 字符串不可写
s = "world";// 指针常量 不可修改
s2 = "world";// 语法没问题, 指针变量 s2 可修改,但是 "hello,world!" 找不到了
2、字符串常用处理函数
C语言 标准库 函数
调用标准库的函数,需要包含对应的头文件
学习标准库中的函数,主要了解函数的作用、参数、返回值。
怎么学习?
①百度
②可以查询标准库的相关文档
在虚拟机(ubuntu)内打开终端用命令查询
man -f 函数名 ---->显示所有与该函数相关的信息
man 数字 函数名---->进入相关的页面
(1)strlen求字符串的长度
NAME
strlen - calculate the length of a string计算一个字符串的长度
SYNOPSIS// 需要包含的头文件
#incl