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的主要内容,如果未能解决你的问题,请参考以下文章

如何用C语言读写文件

如何用C语言文件操作修改指定文件

第三次作业(字符,单词统计)

深度长文教你彻底掌握C++/C指针:指针和数组与字符串

深度长文教你彻底掌握C++/C指针:指针和数组与字符串

对 C 字符串数组使用简单的 void 指针