2019.11
为了更好地理解C 中字符串的存储方法,必须首先掌握内存分区情况。不管是哪一个区域都是来存储数据和指令的;不同的数据和指令存储在不同的区域,方便系统的管理。
1内存中的5大区域
(1)栈(Stack):专门用来存储程序的局部变量,所有的局部变量都是声明在栈区域中的。
(2)堆(Heap):允许程序员手动从堆中申请内存空间来使用,程序员自己申请指定字节数的空间。
(3)BSS (Block Started by Symbol)段:用来存储
未初始化的全局变量和静态变量。声明1个全局变量,如果我们没有初始化,在程序运行的最开始时候,这个全局变量是没有初始化的,此时是存储在BSS 段的;等待程序对其初始化后,则将其放入常量区中。(4)数据段/常量区(DATA 区):用来存储已经初始化的全局变量、静态变量、还有常量数据。(5)代码段(Instruction Block):用来存储程序的
代码/指令。
2
字符串型数据的存储
2.1使用“字符数组”来存储字符串型数据
将字符串数据的每一个字符存储到字符数组中,并
在后面追加1个‘\0’代表字符串存储结束。方法如下:(1)根本的方式:char name []={‘j’,‘a’,‘c’,‘k’,‘\0’};
(2)简写的方式:char name []={"jack"};(3)最常用的方式:char name []="jack";注意事项
(1)如果使用字符数组存储字符串数据的时候,没
有指定这个字符数组的长度,那么这个时候,可以使用
sizeof 运算符求解字符数组的长度,字符数组中实际存储的字符个数是:sizeof (数组名)-1;
(2)如果指定的字符数组的长度小于等于了字符串
的长度,这个时候就会出现存储不下字符串的情况(如:char name [2]="jack";);
(3)建议:在使用字符数组存储字符串数据的时
候,最好不要指定字符数组的长度,让编译器自己计算即可(如:上方3种赋值方法中数组的长度均自动计算为5);
(4)在声明1个字符数组的同时,可以初始化1个
中文字符串数据给这个数组(如:char name []=“中华人民共和国”;);(5)计算字符数组中存储的字符串的实际长度的2种方法:
1)从第1个字节开始计数,直到遇到‘\0’为止;示例代码如下:
<begin>
char name[100]="jack";int len=0;
while(name[len]!='\0'){len++;}<end>2)使用C 中string.h 库中的strlen 内部函数;示例代码如下:
<begin>
char name[100]="jack";
作者简介:张龙波,男,硕士,研究方向:计算机应用。收稿日期:2019-08-27
试议C 中字符串型数据存储的特点
张龙波
(江苏师范大学科文学院,江苏徐州221000)
摘
要:在实际软件开发过程中,字符串是广泛使用的一种数据类型,熟练掌握C 中字符串型数据的
存储特点对程序员至关重要。根据实际的授课经验,依然有较多C 语言学习人员对C 中的字符串型数据的存储特点掌握得不够清晰准确,通过最简洁明了的叙述,可使大家对C 中字符串型数据的存储有个全新的认识,方便以后进行更深层次的学习。关键词:
字符串;局部变量;全局变量
95
2019.11
printf("%d\n",strlen(name));<end>
2.2使用“字符指针”来存储字符串型数据方法如下:直接将1个字符串数据初始化给1个字字符串长度必须小于等于255
符指针,示例代码如下:
<begin>
char*name="jack";printf("%s\n",name);<end>
虽然不知道这个原理,但是有1点值得肯定:绝对不是将字符串“jack”存储到指针变量name 中,因为name 是1个普通的字符型指针变量,只能存储一个地址。2.3两种字符串存储方式的区别
(1)使用字符数组来存储:将字符串数据的每一个字符存储到字符数组的元素中,追加1个‘\0’表示结束,如:char name1[]=“jack”;
(2)使用字符指针来存储:直接为字符指针初始化1个字符串数据,如:char*name2=“rose”;
(3)当name1和name2都是局部变量的时候:
name1字符数组,是申请在栈区,字符串“jack”是存
储在这个字符数组的每一个元素中。name2是1个局部的指针变量,也是声明在栈区的,但是:字符串常量“rose”是以字符数组的形式存储在常量区中的,仅仅将“rose”在常量区的字符数组的首地址存放到name2指针变量中;请观察如下示例代码:
<begin>
int main(){char name1[]="jack";
char*name2="rose";
printf ("字符数组name1元素的首地址
是:%p\n",name1);
printf ("指针变量name2中存放的地址
是:%p\n",name2);
}<end>
其运行效果如图1所示。
经观察:可以发现它们两个地址差别较大,说明“jack”和“rose”并不是存储在同一个内存分区。此时,内存状态图如图2所示。
(4)当name1和name2都是全局变量的时候:
name1字符数组是存储在常量区的,字符串“jack”的
每一个字符是存储在这个数组中的每一个元素中的。name2字符指针也是存储在常量区的,字符串“rose”也是以字符数组的形式存储在常量区的;name2指针变量中存储的是“rose”这个字符串在常量区的地址。请
观察如下示例代码:
<begin>
char name1[]="jack";char*name2="rose";int main(){printf ("字符数组name1元素的首地址
是:%p\n",name1);
printf ("指针变量name2中存放的地址
是:%p\n",name2);
}<end>
其运行效果如图3所示。
经观察:可以发现它们两个地址差别不大,说明“jack”和“rose”是存储在同一个内存分区中的。此时,内存状态图如图4所示。
图1
图2
图3
图4
字符数组name1元素的首地址是:0X22FE40指针变量name2中存放的地址是:0X404000
r
o
s
e
\0
栈name1j
a c k \0name2
0X404000常量区
0X404000字符数组name1元素的首地址是:0X403010指针变量name2中存放的地址是:0X404000
r
o
s e \0
栈
常量区
name1j a c
k \0
name2
0X404000
0X404000(下转第105页)
96
2019.11
(5)以字符数组存储的字符串数据,不管是全局的
还是局部的,都可以使用下标法去修改字符数组的每一个元素。
(6)以字符指针存储的字符串数据,不管是全局的
还是局部的,这个时候字符指针指向的字符串数据都是无法修改的。
(7)当以字符指针的形式要将字符串数据存储到常
量区的时候,并不是直接将字符串存储到常量区的!而是先检查常量区中是否有相同内容的字符串:如果有,直接将这个字符串的地址拿过来返回;如果没有,才会将这个字符串数据存储在常量区。当重新为字符指针初始化1个字符串的时候并不是修改原来的字符串,而是重新的创建了1个字符串,把这个新的字符串的地址赋值给它。请观察如下示例代码:
<begin>
char*name1="jack",*name2="jack";printf("%p,%p\n",name1,name2);name2="rose";
printf("%p,%p\n",name1,name2);<end>
其运行效果如图5所示。
参考文献
[1]谭浩强.C 程序设计.5版.清华大学出版社.
[2]明日科技.C 语言从入门到精通.2版.清华大学出
版社.
图50X404000,0X4040000X404000,0X40400E
3.3在技术层面进行严格的信息把控
要实现对计算机网络安全的有效控制,从业者还应
当在技术层面做到与时俱进,防止病毒的主动入侵给用户带来损失,实现对信息安全的有效防护。网络病毒和木马是随着信息技术的发展不断变化调整的,这些病毒无时无刻不在对计算机的防火墙进行攻击,这就导致防火墙技术一旦跟不上病毒和木马的发展速度,就会造成防护效果降低,计算机中的私密信息无法在网络中得到有效保护。如在计算机网络系统中应用加密技术,防止信息泄露。对称加密相关过程模型如图2所示。
设计者可以在不断对计算机防护技术进行更新的同时,通过加入其他技术实现对网络安全的管理,同时设计者也可以通过加密技术对计算机信息进行加密,降低信息泄露的风险,从而提升信息的安全性。设计者还可以通过虚拟技术隔离,将同一个大数据云储存空间的内容进行隔离,类似于船舱底部的防水隔间,降低防火墙被攻破后信息泄露的数量和效率,实现对信息的层层防护,降低信息安全风险。
4结语
计算机网络安全对于大数据系统的运用提供了重要
的帮助,能够使大数据在信息处理和分析中充分发挥其优势。当前的网络中存在着多重安全隐患,要求计算机从业者能够针对性的进行解决,通过提升用户的网络安全意识,建立完善的监管机制,对网络安全技术进行及时更新和综合使用,实现对网络安全水平的提升,加速推进信息时代的发展。
参考文献
[1]刘薇.大数据时代下计算机网络信息安全问题分析[J].计算机产品与流通,2019,(10):62.
[2]孙傢.计算机网络安全在大数据系统的应用[J].
科技风,2019,(25):107.
[3]曾志勇.计算机网络安全在大数据系统的应用[J].
技术与市场,2019,26(05):124-125.[4]康莉莉.计算机网络安全在大数据系统的应用[J].计算机产品与流通,2019,(04):51.
[5]车宇,罗钊航.计算机网络安全在大数据系统的应
用[J].电子技术与软件工程,2019,(03):184.[6]肖敏,郭美.计算机网络安全在大数据系统的应用
[J].集成电路应用,2019,36(01):47-48.图2对称加密技术模型
明文
加密算法
密文
解密算法
明文
密钥加密密钥两者相等
解密密钥
(上接第96页
)
105
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论