您的位置:首页 > 其它

char[] 未指定数组大小引发的错误

2015-07-15 14:48 330 查看
剑指offer上面的一道题目,不难,甚至可以说是简单的。但是就是因为一处隐蔽的错误让我晚睡了半个多小时,今天发生这个而错误的原因分享给大家,希望大家不要犯跟我相同的错误。

题目:请实现一个函数,将一个字符串中的空格替换成“%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中将数值中的某些元素向后移动了,自然数组是装不下这些替换之后的数据的。所以会报段错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: