如何用C语言实现单词反转输出?现有代码输出乱码求助
问题分析与解决
你的代码出现随机字符的原因是数组越界访问:
- 你定义的
char word[10]数组下标范围是0到9,但循环从i=10开始,这已经超出了数组的合法访问范围,此时读取的是内存中未初始化的随机值,所以会先输出一堆乱码。 - 另外,你直接从数组末尾倒着遍历,不管实际输入的单词长度,就算没越界,也会遍历到数组中未被输入字符填充的位置(这些位置的值也是随机的,除非刚好是0)。
修正方案
方法1:先获取单词长度,从最后一个有效字符开始遍历
利用strlen()函数获取字符串长度(需要包含<string.h>头文件),然后从长度减1的位置开始倒序输出到0:
#include <stdio.h> #include <string.h> int main(){ char word[10]; printf("Please enter a word : "); scanf("%9s", word); // 限制输入长度,避免缓冲区溢出 // 获取字符串长度,strlen返回有效字符数,最后一个字符下标是len-1 int len = strlen(word); for (int i = len - 1; i >= 0; i--){ printf("%c", word[i]); } printf("\n"); // 输出换行让结果更整洁 return 0; }
方法2:找到字符串结束符的位置,从它的前一位开始倒序
不需要额外头文件,遍历找到'\0'的位置,再向前倒着输出:
#include <stdio.h> int main(){ char word[10]; printf("Please enter a word : "); scanf("%9s", word); // 限制输入长度,避免缓冲区溢出 int i = 0; // 先找到字符串结束符的位置 while (word[i] != '\0') { i++; } // 从结束符前一位开始倒序输出 for (i = i - 1; i >= 0; i--){ printf("%c", word[i]); } printf("\n"); return 0; }
额外注意事项
- 原代码中
scanf("%s", word)没有限制输入长度,若用户输入超过9个字符(数组共10位,最后一位要存字符串结束符'\0'),会导致缓冲区溢出,所以改成scanf("%9s", word),限制最多读取9个字符,避免越界风险。
内容的提问来源于stack exchange,提问作者user20224475
相关产品推荐
相关产品推荐

