C-字符数组的存储, 字符指针, fputs, fgets
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C-字符数组的存储, 字符指针, fputs, fgets相关的知识,希望对你有一定的参考价值。
上课笔记:
字符串在C语言中的存储(数组和指针)
1. 使用字符数组来存储
1 char name[5] = {‘j’,’a’,’c’,’k’}; 2 char name[] = {‘j’,’a’,’c’,’k’}; 3 char name[] = {“jack”}; //只有直接给字符数组初始化1个串的时候, 才会自动加 ‘\0’ 4 char name[] = “jack”;
2. 使用字符指针来存储字符串数组
char *name = “jack”;
和
char name[] = “jack”; 的区别
当二者都是局部变量的时候
数组连同数组元素都是申请在栈区
指针变量 申请在栈区, 但是内容是存在于常量区的一个数组, 指针变量再指向的常量区的字符串的地址
当二者都是全局变量的时候
数组也是存在常量区(全局变量), 数组内容也是在常量区
指针在常量区, 字符串按数组形式也是存在于常量区, 指针指向的时候字符串所对应的地址
以字符数组存储字符串数据, 不管是全局的还是局部的, 都可以通过下标 去修改字符数组中的每一个元素
以字符指针的形式存储字符串数据, 这个时候字符指针指向的字符串数据是无法修改的, 不管是全局的指针变量还是局部的指针变量, 都是无法通过指针去修改字符串数据的
字符串的恒定性
前提: 是以字符指针形式存储的字符串
1. 字符指针存储字符串数据的时候, 不管是全局和局部, 字符串数据都是在常量区的; 并且一旦存储到了常量区, 字符串数据就无法再发生更改
2. 当我们以字符指针的形式将字符串数据存储到常量区的时候, 并不是直接将字符串存储到常量区, 而是先检查常量区中是否有相同内容的字符串
如果有, 直接将这个字符串的地址拿过来
如果没有, 那就将这个字符串数据存储在常量区
3. 当我们重新为字符指针初始化1个字符串的时候
并不是修改原来的字符串, 而是重新创建了一个字符串, 再把这个新的字符串的地址赋值给它
4.
1 char *name = “jack”; 2 name = “rose”;
这样是可以, 但是不是把”jack”改成”rose”
而是重新创建1个”rose”
再把”rose”地址赋值给name
1 char name[] = “jack”; 2 name = “rose”;
不行, name 是数组名, 代表的也是数组的地址, 不能直接为数组名赋值
但是可以 name[0] = ‘r’;
面试题
求一个字符串里面某个字符出现的次数
思路:
1. 先用一个指针变量指向这个字符串
2. 遍历
将字符串存储到文件中
1. 先声明1个文件指针, 指向磁盘上的文件
FILe *pfile = fopen(“文件路径”, “对文件进行的操作”)
2. 使用fputs函数将指定的内容写入到文件当中
fputs(变量, pfile);
3. 写完之后用 fclose()函数将创建的文件关闭
fclose(pfile);
4. 注意: 当操作模式为”w” 的时候, 如果指定文件不存在, 那就创建文件吗, 如果文件存在, 直接覆盖文件原来内容
5. 只有当操作模式为 “a” 的时候, 如果文件存在, 就会把新的内容追加进去, 如果不存在, 那么就创建文件
以上是关于C-字符数组的存储, 字符指针, fputs, fgets的主要内容,如果未能解决你的问题,请参考以下文章