strcat函数造成的段错误(Segmentation fault)
转自:http://book.51cto.com/art/201311/419441.htm
3.21 strcat函数造成的段错误
代码示例
- int main()
- {
- char dest[7]="12345";
- char* src = "abcdefghigklmnopqrstuvwxyz";
- strcat(dest, src);
- cout << "dest:" << dest << endl;
- return 0;
- }
现象&后果
程序运行时把字符串src添加到目标字符串dest之后时会溢出,可能导致段错误(Segmentation fault)。
Bug分析
上段代码中定义了一个char型数组dest,然后调用strcat函数把字符串src追加到dest中去。strcat函数的原型是char *strcat(char *dest,char *src),功能是把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。这就要求dest必须有足够的空间来容纳src的字符串。但是,上述代码在追加前没有判断src字符串的长度,而实际上src字符串的长度已经超过dest的内存空间,可能导致段错误。
正确代码
- int main()
- {
- char dest[100]="12345";
- char* src = "abcdefghigklmnopqrstuvwxyz";
- if(strlen(dest) + strlen(src) < 100)
- {
- strcat(dest, src);
- }
- cout << "dest:" << dest << endl;
- return 0;
- }
编程建议
在操作指针时,一定要保证在指针有效内存空间内操作,避免访问未分配的空间而出现段错误。
strcat函数造成的段错误(Segmentation fault)的更多相关文章
- linux C++ 莫名奇异的段错误(segmentation fault),无法调用其他函数
进来在linux下开发C++项目,遇到了非常奇怪的bug. 项目须要多线程实现,在写好代码后,每当执行到线程函数内部,当内部调用其他函数如printf.fopen等时就会提示段错误(segmentat ...
- 函数栈溢出引起的段错误segmentation fault
遇到了一个奇怪的问题: 有一个回调函数中发生了段错误,但经检查也没有什么明显的错误,然后用排除法一点一点屏蔽,最后定位在一个函数里出错,但这个函数没什么明显错误.最后把入口参数改为引用传递就不报错误. ...
- Linux下的段错误(Segmentation fault)
Linux开发中常见段错误问题原因分析 1 使用非法的内存地址(指针),包括使用未经初始化及已经释放的指针.不存在的地址.受系统保护的地址,只读的地址等,这一类也是最常见和最好解决的段错误问题,使用G ...
- linux: QT安装时出现段错误segmentation fault
环境:macOS 10.14.6 VMware Fusion版本:11.0.1 QT版本:qt-creator-linux-x86_64-opensource-2.5.2.bin 安装时出现:segm ...
- 用gdb调试程序笔记: 以段错误(Segmental fault)为例
用gdb调试程序笔记: 以段错误(Segmental fault)为例[转] 1.背景介绍2.程序中常见的bug分类3.程序调试器(如gdb)有什么用4.段错误(Segmental fault)介绍5 ...
- 利用linux信号机制调试段错误(Segment fault)
在实际开发过程中,大家可能会遇到段错误的问题,虽然是个老问题,但是其带来的隐患是极大的,只要出现一次,程序立即崩溃中止.如果程序运行在PC中,segment fault的调试相对比较方便,因为可以通过 ...
- 利用linux信号机制调试段错误(Segment fault)【转】
转自:http://blog.csdn.net/ab198604/article/details/6164517 版权声明:本文为博主原创文章,未经博主允许不得转载. 在实际开发过程中,大家可能会遇到 ...
- linux64位系统中g++4.4.7下使用wcsncpy函数有造成段错误的BUG(其它g++版本号未知)
一.描写叙述 眼下已经linux64位系统中g++4.4.7下发现了该bug.其它的版本号还未測试. 经測试,假设传入wcsncpy函数第一个參数(即目标缓冲区)的地址不能被4整除的话就必然会发生段错 ...
- 【Z】段错误Segment Fault定位,即core dump文件与gdb定位
使用C++开发系统有时会出现段错误,即Segment Fault.此类错误程序直接崩溃,通常没有任何有用信息输出,很难定位bug,因而无从解决问题.今天我们介绍core dump文件,并使用gdb进行 ...
随机推荐
- pthread 学习系列 case2-- pthread_mutex_t
许多互斥对象 如果放置了过多的互斥对象,代码就没有什么并发性可言,运行起来也比单线程解决方案慢.如果放置了过少的互斥对象,代码将出现奇怪和令人尴尬的错误.幸运的是,有一个中间立场.首先,互斥对象是用于 ...
- Linux下使用popen()执行shell命令
转载 http://www.cnblogs.com/caosiyang/archive/2012/06/25/2560976.html 简单说一下popen()函数 函数定义 #include < ...
- TFS2008解除独占式锁定文件命令(转载)
使用场景:如果项目团队成员A对项目某个文件以独占式方式签出,恰好那天该成员A没有来上班而成员需要对此文件进入修改并check in,这时需要先把A对该文件的锁定解除.没有IDE可以使用,只能使用下面的 ...
- jQuery基础细节
使用CDN版的jQuery 用托管在公共CDN(Content Delivery Network,内容分发网络)上的jQuery库,CDN是一种内容分发网络,当用户请求其数据时,CDN ...
- 老项目的#iPhone6于iPhone6Plus适配#iPhone6分辨率与适配
技术博客http://www.cnblogs.com/ChenYilong/ 本文永久地址为http://www.cnblogs.com/ChenYilong/p/4011744.html ,转 ...
- iPod怎么下载歌曲?用iTunes传文件功能!
昨儿一小美女拿我的手机听歌,说她不知道iPod怎么下载歌曲,因为还在上学家里不肯给买智能机,怕会影响学业.她的iPod shuffle刚买没多久还不会往里传歌曲,让我帮看看怎么整,心想她应该是没装iT ...
- (7)基本工作流(使用AndroidStudio编辑Cocos项目)
接下来详细介绍一下如何使用Android Studio打开以及编辑cocos2d-x 3.10项目: 一.新建项目: 新建源代码项目,预编译库项目不支持使用Android Stduio打开,见图1 ...
- MVC中html转义问题(直接输出html的方法)
MVC中如果用@string(string是包含html代码的字符串)形式输出字符串,那么对应的html标签会自动转义,如果想直接输出html可用以下方法: @(new HtmlString( &qu ...
- Minimum Depth of Binary Tree
二叉树的最小深度 采用递归的方式求左右结点的高度,注意判断一个结点是否是叶子结点(左右子树都不存大). int minDepth(TreeNode *root) { return minDepth(r ...
- 2015安徽省赛 F.多重部分和问题
题目描述 有n种不同大小的数字,每种各个.判断是否可以从这些数字之中选出若干使它们的和恰好为K. 输入 首先是一个正整数T(1<=T<=100) 接下来是T组数据 每组数据第一行是一个正整 ...