C语言输出字符串首尾字符代码运行结果异常问题求解
代码错误分析与修复方案
存在的错误点
- 字符串末尾索引计算错误
C语言数组下标从0开始计数,长度为n的字符串,末尾有效字符的下标为n-1。你代码中使用string[n+1]属于数组越界访问,读取的是字符串结束符\0之后的未知内存数据,这是输出异常字符的核心原因。 - scanf参数写法不规范
数组名string本身就代表数组首地址,不需要额外添加取地址符&,该写法虽然在部分场景下不会直接报错,但存在内存访问隐患。 fflush(stdin)为未定义行为
C语言标准仅规定fflush()对输出流的处理逻辑,对输入流stdin调用fflush的行为没有明确定义,不同编译器实现逻辑差异极大,可能触发不可预期的错误。且%s格式符读取字符串时会自动跳过前置空白字符(包括换行符),不需要额外清空输入缓冲区的操作。- 输出缺少换行符
每次输出两个字符后未打印换行符,三次输出结果会拼接在同一行,不符合预期的每行一组结果的要求。
修正后的代码
#include<stdio.h> int main(){ for(int i=0;i<3;i++){ int n; // 字符串长度 char string[101]; scanf("%d %s", &n, string); printf("%c%c\n", string[n-1], string[0]); } return 0; }
效果验证
针对你提供的测试输入:
5 abcde 6 qwerty 3 ijk
修正后的代码将输出:
ea yq ki
完全符合预期结果。
内容的提问来源于stack exchange,提问作者Maz Diaz
相关产品推荐
相关产品推荐

