char[] 未指定数组大小引发的错误
2015-07-15 14:48
330 查看
剑指offer上面的一道题目,不难,甚至可以说是简单的。但是就是因为一处隐蔽的错误让我晚睡了半个多小时,今天发生这个而错误的原因分享给大家,希望大家不要犯跟我相同的错误。
题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
#include<iostream> #include<string.h> using namespace std; void replaceSpace(char* str,int length) { int i = 0; int j = length; int k = 0;//发现几个空格 while(i < length+2*k) { if(*(str+i) == ' ') { j = length+2*k; while(j > i)//向后移动空格之后的字符串 { *(str+j+2) = *(str+j); j--; } *(str+i) = '%';//在相应的位置进行替换操作 *(str+i+1) = '2'; *(str+i+2) = '0'; k++; *(str+length+2*k) = '\0';//末尾添加'\0' i = i + 3; } else { i++; } } cout << str << endl; } int main(void) { char str[256] = "hello wor ld hello world";//找了半个多小时的段错误//char str[] = "hello wor ld hello world"; replaceSpace(str,strlen(str)); return 0; }
</pre><pre name="code" class="cpp">
如果在主函数中写成char str[] = "hello wor ld hello world";运行的结果首先打印出替换之后的结果,之后会报段错误。这个段错误让我很是头疼,之前一直在纠结是不是在replaceSpace函数中出现了错误,但是最后还是在主函数中发现了错误。原因是在replaceSpace中有对数组的修改,将数组中的某些数据向后移动了,如果不指定数组的维数,那个数组str只能分配strlen(str)+1个大小的字节。这样在replaceSpace中将数值中的某些元素向后移动了,自然数组是装不下这些替换之后的数据的。所以会报段错误。
相关文章推荐
- iOS设计模式--桥接
- jQuery使用FormData上传文件
- 搜的面试题零散记录
- OC基础10:基本的C语言特性1
- [leetcode] 165.Compare Version Numbers
- [小技巧] git 取得两个 tag 之间的 commit
- 认证 (authentication) 和授权 (authorization) 的区别
- Android Animations动画使用详解
- 前端收集
- "Unable to execute dex: Multiple dex files define..."的解决办法
- 2015 我的IT之路
- Redis的key操作
- mac 中vmware fusion 使用技巧 (delete and control)
- 学习JAVA多线程的网站
- 更改Tomcat命令行窗口标题
- Windows下Redis的安装使用
- Prewitt算子的运用
- java 实现数据库分组功能
- Android之Adapter用法总结
- 3.1. 内核体系结构