C语言字符串反转代码异常问题:输入少于4个字符时出现额外字符
问题分析与修复方案
你遇到的问题核心在于C语言的字符串必须以'\0'(空字符)作为结束标志,而你的代码里没有给反转后的rev数组添加这个结束符。当字符串长度较短时,rev数组后续的内存区域可能恰好有随机的垃圾字符,就会被printf当成字符串的一部分输出;而当字符串较长时,可能刚好内存里的内容凑巧是'\0',所以看起来正常,但这其实是偶然的情况。
具体修复步骤:
- 在完成反转循环后,需要手动给
rev数组的末尾添加'\0',位置就是rev[count] = '\0';(因为反转后的字符串长度和原字符串一样,都是count)
修复后的完整代码:
#include <stdio.h> int main() { // 注意:main函数标准返回类型是int,不是void char str[1000], rev[1000]; int i, j, count = 0; printf("Enter the string :"); scanf("%s", str); printf("\nString Before Reverse: %s", str); // 计算字符串长度 while (str[count] != '\0') { count++; } j = count - 1; for (i = 0; i < count; i++) { rev[i] = str[j]; j--; } rev[count] = '\0'; // 关键:添加字符串结束符 printf("\nString After Reverse: %s", rev); return 0; // 对应int main的返回值 }
额外优化提示:
- 标准C语言中
main函数的返回类型应该是int,而不是void,最后加上return 0;更规范。 - 如果输入的字符串包含空格,
scanf("%s", str)会读取到空格为止,如果你需要支持带空格的字符串,可以改用fgets(str, sizeof(str), stdin),不过要注意处理fgets会读取换行符的问题。
内容的提问来源于stack exchange,提问作者assassin
相关产品推荐
相关产品推荐

