先上例子:

char buffer1[32];
memset(buffer1,'\061',sizeof(buffer1));
buffer1[31] = '\0';
printf("buffer1=%s\n", buffer1);
char *buffer3 = "0123456789\0abcdef";//17
strcpy(buffer1,buffer3);
printf("buffer1=%s\n", buffer1);
printf("buffer1=%s, len_buffer1=%d, buffer1[10]=%c, buffer1[11]=%c\n", buffer1, strlen(buffer1), buffer1[10], buffer1[11]);char buffer4[32];
memset(buffer4,'\061',sizeof(buffer4));
//buffer4[31] = '\0';
printf("buffer4=%s, sizeof(buffer4)=%d\n", buffer4, sizeof(buffer4));
char *buffer2 = "0123456789012345678901234567890123456789abc";//43
memset(buffer4,0,sizeof(buffer4));
strncpy(buffer4,buffer2,sizeof(buffer4));
//buffer4[31] = '\0';
printf("buffer4=%s, len_buffer4=%d, buffer4[10]=%c, buffer4[31]=%c\n", buffer4, strlen(buffer4), buffer4[10], buffer4[31]);

//例2
char start_ip[32];
char *nvram_value = NULL;
nvram_value = (char *)nvram_bufget(RT2860_NVRAM, "dhcpStart");
memset(start_ip, 0x00, sizeof(start_ip));//将内存置为空0x00(地址格式)
strncpy(start_ip, nvram_value, sizeof(start_ip));//n为目的地址大小
start_ip[UDHCPD_CONF_BUFF-1] = '\0';//将最后一位置为结束符\0

总结:

1)start_ip[UDHCPD_CONF_BUFF-1] = '\0';
        当sizeof(nvram_value) >= sizeof(start_ip)时为满复制,结尾无结束符\0很危险(fgets读取一行时,没有结束符会将其他字符一并读取等);所以要将空间最后一位其赋值为结束符;
        当sizeof(nvram_value) < sizeof(start_ip)时,dst没有占满,strncpy结束后会将剩下字符位置全部置为结束符\0
        ['1','2','3','4','\0','\0','\0','\0']
        2)一般字符串操作(包含打印字符串printf)等,都是遇到\0作为其结束操作的标志;

拓展:

snprintf函数有越界保护;sprintf没有越界保护;
        1)snprintf如果格式化后的字符串长度小于 size,则会把字符串全部复制到 str 中,并给其后添加一个字符串结束符 \0;
        2)snprintf如果格式化后的字符串长度大于等于 size,超过 size 的部分会被截断,只将其中的 (size-1) 个字符复制到 str 中,并给其后添加一个字符串结束符 \0,返回值为欲写入的字符串长度。
        sprintf出现越界时,即使有时会正常输出(因为其后连续的地址空间为空,结束了操作),但已造成越界错误(若后续内存申请,其后地址被分配,地址空间内容不为空,造成越界访问)。

字符(字符数组)越界相关推荐

  1. 字符指针数组(二级指针)

    一.字符指针数组 - 1 1.字符指针数组概念 字符指针数组是指一个数组中的各个元素都是字符指针 或者是字符串(字符数组)的首地址 2.初始化 char *name[]={"zhangsan ...

  2. C语言字符型数组ppt,C语言第13讲指针与字符串(字符数组).ppt

    C语言第13讲指针与字符串(字符数组).ppt 6.2.3 指针与字符串(字符数组) C语言用字符数组存放字符串. 字符数组元素个数确定,一般用下标控制循环. 字符串有效字符个数由0确定,用结束符0控 ...

  3. c语言字符数组给字符指针,C语言常见有关问题之字符串数组和字符指针数组有关问题...

    C语言常见问题之字符串数组和字符指针数组问题 通过如下的实例来讲解这个问题: #include int main(void) { char a[3][4] = {"123", &q ...

  4. c 将数字数组转成字符串_C+|用指针指向字符串字面量、字符数组及字符指针数组...

    指针可以指向一个字符串字面量,可以指向一个字符数组,可以指向一块动态分配的内存单元: char *s1, *s2, *s3 = "abcde"; char ch[] = " ...

  5. 共享内存中使用指针_详解c++中字符指针数组的使用

    之前有写过一篇叫c++中动态数组的使用,今来看看c++中的字符指针数组的使用. 涛哥:c++中的动态数组使用​zhuanlan.zhihu.com 指针数组,就指向指针的指针,很早以前在说指针的时候说 ...

  6. 在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。...

    //在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是'*',其余 位置存的是'#':输出这个数组中的所有元素.char [][]y=new char [10][10] ...

  7. 算法刷题——字符串| 给定一个字符类型数组chas[],判断chas中是否所有的字符都只出现过一次

    import java.util.Optional;/*** Author:SunLala* Date: 2022/3/26* 功能描述:(给定一个字符类型数组chas[],判断chas中是否所有的字 ...

  8. c++ 定义一个字符栈类Stack(包括类的实现)。数据成员包括一个存放字符的数组stck[ ]和一个栈指针tos。栈数组的尺寸由常量SIZE确定。栈的基本操作为Push()和Pop()。

    定义一个字符栈类Stack(包括类的实现).数据成员包括一个存放字符的数组stck[ ]和一个栈指针tos.栈数组的尺寸由常量SIZE确定.栈的基本操作为Push()和Pop(). //定义一个字符栈 ...

  9. C语言指针学习(6)指针数组-字符指针数组

    ** 一.指针数组(比较常见) ** 2.指针数组定义:数组中每个元素都是一个指针(地址) 每个元素只能是地址,不能是普通数据 3.定义指针数组的语法: 数据类型 *数组名[数组长度/元素个数]={地 ...

  10. 【C语言】字符指针数组查找字符串

    字符串常识: 1.以'\0'结尾,用" "括起来,字符是用' '括起来 2.字符串有字符数组和字符指针两种表现形式.字符数组不一定是字符串,有'\0'结束的字符数组才是字符串,但字 ...

最新文章

  1. 2021年大数据ZooKeeper(三):Zookeeper数据模型和节点类型
  2. C# window服务操作
  3. jQuery中ajax的触发时机,javascript - 如何在启动Ajax查询的jQuery中触发方法change() - 堆栈内存溢出...
  4. OpenExpressApp对建模支持的初步计划
  5. 使用tinylog 1.1改进您在Java EE应用程序中的登录
  6. 【微信公众平台开发】之一:入门与BAE3.0下操作
  7. pymysql ︱mysql的基本操作与dbutils+PooledDB使用
  8. 我是如何用redis做实时订阅推送的
  9. oracle 导入文件 年月日,oracle导入文件时,日期格式问题
  10. Java完全自学手册,一册在手,offer我有(附程序员书单)
  11. 如何设置打印机双面打印?
  12. 一个android本地txt阅读器的思路与实现
  13. 微信小程序列表页跳转到详情页
  14. 蜡笔小新 (python)
  15. 麦吉尔大学 计算机科学和阿尔伯特,加拿大低龄留学-阿尔伯特学院-Albert College...
  16. 小招喵跑步(动态规划)
  17. HTTP TFP状态解释
  18. 音频格式(一)PCM和WAV
  19. 仿百度首页登陆框拖拽效果(可视窗口内拖动)
  20. PC企业微信HOOK接口,获取指定好友的详细信息

热门文章

  1. 汇编语言----处理机控制指令及伪指令
  2. 武大计算机科学与技术弘毅学堂,武汉大学研究生精品课-百余新学子体验“弘毅学堂”...
  3. Mac干货 如何快速的在Mac上安装Windows双系统?虚拟机Parallels Desktop +Bootcamp安装
  4. Python基础 笔记(三) 标识符、输入输出函数
  5. P2324 [SCOI2005]骑士精神(IDA*)
  6. CS144课程实验详解-lab0-第一部分
  7. (转载)PyCharm 默认快捷键
  8. 软考 中级职称哪些最热门_最怪异的职称也可能是最受欢迎的
  9. 那些与耐克“作对”的品牌现在怎么样了
  10. Python opencv 伪彩色保存的结果和plt.imshow(blur_heatMap_jet)的结果截然相反 Python opencv如何imshow一张图片