C语言:使用for循环实现A-Z字符串数组并逆序Z-A的代码求助
问题分析与代码修正
你的代码问题出在逆序部分的逻辑完全错误:第一个循环结束后,left的值是26(对应数组索引26),此时数组的26到51位是malloc分配的未初始化内存(垃圾值)。你试图通过交换left和right位置的值来实现逆序,但操作的是未赋值的内存区域,自然输出乱码,而且这也不符合“逆序填充Z到A”的需求。
修正后的代码
char *problem58() { char *result = malloc(52 * sizeof(char)); // C中malloc无需强制类型转换 int idx = 0; // 填充并打印A到Z for (char c = 'A'; c <= 'Z'; c++) { result[idx] = c; printf("%c", c); idx++; } // 填充并打印Z到A for (char c = 'Z'; c >= 'A'; c--) { result[idx] = c; printf("%c", c); idx++; } // 若后续需将result作为字符串使用,需额外分配1字节存储结束符 // char *result = malloc(53 * sizeof(char)); // result[52] = '\0'; return result; }
关键修正点
- 去掉了冗余的
left、right、temp变量,用idx跟踪当前填充位置,逻辑更清晰。 - 逆序部分直接从
'Z'递减到'A',将字符依次填充到数组的后半段(索引26到51),同时完成打印,完全符合需求。 - 原代码的交换逻辑是错误的,因为后半段数组未初始化,交换只会引入垃圾值,正确做法是直接逆序遍历字符填充。
运行修正后的代码,终端会输出:ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
内容的提问来源于stack exchange,提问作者Dinosour
相关产品推荐
相关产品推荐

