Lesson13 PoEdu培训第二课 C语言篇(5) 字符串
文章类别: 培训笔记 0 评论

Lesson13 PoEdu培训第二课 C语言篇(5) 字符串

文章类别: 培训笔记 0 评论

字符串

思维导图

Alt 前置代码

前置代码

Alt 前置代码

表现形式

字符串的表现形式为: 两个双引号括起来的所有字符.
比如 printf("你好吗?\n"); 双引号中的就是字符串

复习

程序在我们内存中, 分为 栈区, 堆区, 代码区, 常量区.
根据我们前边所学, 代码区和常量区是不可修改的.

存储形式

字符串的存储形式分2中, 数组存储常量存储.
一般的, 我们的字面值不存储在常量区, 它是所见即所得的.
但是我们的字符串字面值, 是存储在常量区的.
如果我们想要修改我们的字符串, 就必须将字符串存储在我们的字符数组(char xxx[x]中.

小扩展

在我们使用scanf进行输入字符串的时候, 建议使用 scanf_s 函数.
因为我们如果使用 scanf 进行输入, 假如我们的字符数组大小为4, 我们输入一个字符串为 hxhlb.
那么, 因为我们输入的字符串超长, 所以字符数组后边的内存空间会被覆盖掉.
这就是传说中的溢出. 如果在被攻击的时候, 函数返回地址被写入指定的地址, 那么我们的程序就会去执行指定的恶意代码, 很危险...

注意

数组下标都是从0开始的!
字符串需要使用%s进行输出.
字符串都有结束符'\0'(0或者00都可以). 字符串中, 碰到结束符后, 代表字符串结束, 无论之后有没有数据.

比如字符串为 Hades~, 我们改为 Had\0s~, printf进行输出的时候, 只会输出 Had.
大家可以那下边的代码做下测试.

char sVal[10] = { 'H', 'a', 'd', 'e', 's' };
sVal[3] = '\0';
printf("%s", sVal);

在我们赋值字符串的时候, 比如我们要赋值为Hades, 长度为5, 但是我们的字符数组的长度必须为6, 因为我们的字符串需要有结束字符'0'.

如有错误,请提出指正!谢谢.

回复