无题(二):字符串翻转(结合内存四区)

//有一个字符串(”abcdefgdddd”),欲将其翻转,返回一个新字符串。
//要求1:请自己定义一个接口(函数),并实现功能;
//要求2:编写测试用例。
int reverse_str(char* instr, char* outstr)
{
	int ret = 0;//定义返回值并初始化为正常状态
	if (instr == NULL)
	{
		return -1;//错误状态
	}
	else
	{
		outstr = instr; 
		char* start = outstr;//指向字符串起始位置
		char* end = outstr + strlen(outstr) - 1;//指向字符串末尾
		char c; //定义中间变量,用于交换
		while (start < end)
		{
			//交换start与end 指向的值
			c = *start;
			*start = *end;
			*end = c;
			++start;
			--end;
		}
		printf("%s\n",outstr);
	}
	return ret;
	
}
int main()
{
	char myinstr[100] = "abcdefgdddd";
	char myoutstr[100] = {0};
	reverse_str(myinstr,myoutstr);
	system("pause");
	return 0;
}

由上面的程序执行的内存四区的图可以更清晰的了解指针操作在内存中的变化情况。

需要注意的是:

1  全局区中的数据是不能修改的 ,这就是为什么main中要重新再栈内开辟空间,并将全局区内的字符串拷贝的临时空间(即栈区)。

2  采用两个指针分别指向字符串的首位 。要注意循环条件 ,并且在计算end指针指向的位置时,别忘了c语言风格字符串结尾都有一个‘/0’字符 ,因此要减去1.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值