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

本文介绍了在解决剑指Offer中一道字符串替换问题时,由于char[]数组未指定大小导致的错误,分享了错误原因及解决方案,提醒读者避免类似问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

剑指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中将数值中的某些元素向后移动了,自然数组是装不下这些替换之后的数据的。所以会报段错误。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值