在Linux环境下使用C语言倒转字符串,输出错误的解决办法

项目场景:

学习在Linux环境下的C语言编程,利用GDB打Breakpoint,逐步调试Bug


问题描述

尝试将一个字符串倒转后输出,发现执行文件并没有正常的将倒转后的字符串输出。
源代码:

#include <stdio.h>

int main(void)
{
	int i;
	char str[6] = "hello";
	char reverse_str[6] = "";

	printf("%s\n", str);
	for (i = 0; i < 5; i++)
		reverse_str[5-i] = str[i];
	printf("%s\n", reverse_str);
	return 0;
}

如下图所示,在Terminal中,reverse_str函数并没有如同我们预期的正常输出“olleh”。
倒转字符出输出错误


原因分析:

在C语言的编译中, char型通过在字符串末尾加'\0'的方式,描述不定长度的字符串。我们期望的是输出reverse_str这个数组变量,所以我们在GDB中跟踪这个变量的内容变化。结果发现循环结束后,如图所示,reverse_str数组中的内容是,\000\olleh,即倒转后的内容,不仅将hello 倒转了而且,将字符串末尾'\0'也倒转了,并放置在了reverse_str[0]位置。导致了本应该放置在数组末尾的'\0',被挤出了数组。C语言编译器无法正确读取字符串,所以输出错误。
找到debug的位置


解决方案:

解决方案很简单,源代码的问题在于字符串倒转之后每一个元素在数组中放置的位置不正确,只要将每个倒转后的元素移动一位就可以解决这个问题,空出reverse_str[6] 最后一个元素位置,就可以让C语言编译器正确的读取字符串,并且进行输出。

解决后的源代码:

#include <stdio.h>

int main(void)
{
        int i;
        char str[6] = "hello";
        char reverse_str[6] = "";

        printf("%s\n", str);
        for (i = 0; i < 5; i++)
                if (str[i] != '\0')
                reverse_str[5-i-1] = str[i];
        printf("%s\n", reverse_str);
        return 0;
}

最后,倒转后的字符串正确输出。
正确输出结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值