C语言字符串反转后出现乱码及原串追加问题求助
C语言字符串反转乱码问题解决
核心问题出在反转后的字符串没有添加C语言字符串必需的终止符'\0'。
C语言里,printf("%s")输出字符串时,会从指定地址开始逐个输出字符,直到碰到'\0'才停止。你的代码里,inv_str只存入了反转后的字符,没有手动添加'\0',程序就会继续读取inv_str后面的内存内容,直到碰巧遇到'\0'为止——这就是为什么处理不同字符串时会出现随机的乱码或追加原字符串的情况。
看你的代码,main_str[] = "lizard"的数组大小是7(6个字符+1个默认的'\0'),inv_str的大小也是7,空间完全足够存反转后的6个字符加终止符,只需要在循环结束后补加终止符即可。
修正后的完整代码:
#include <stdio.h> int main ( void ) { char main_str[] = "lizard"; char inv_str[sizeof(main_str)]; int index = 0; for (int inv_index = sizeof(main_str)-2; inv_index >= 0; inv_index--) { inv_str[index] = main_str[inv_index]; index++; } // 给反转后的字符串添加终止符 inv_str[index] = '\0'; printf("%s", inv_str); }
之前处理"palindrome"时看似正常,只是巧合——当时inv_str后面的内存恰好有一个'\0',但这属于未定义行为,不能依赖,换个环境或字符串就会暴露问题。
内容的提问来源于stack exchange,提问作者raspiestchip
相关产品推荐
相关产品推荐

