Онлайн компилятор C

#include <stdio.h> int main() { char str[1005]; if (scanf("%1000s", str) != 1) { return 0; } for (int i = 0; str[i] != '\0'; i++) { char ch = str[i]; if (str[i + 1] >= '2' && str[i + 1] <= '9') { int count = str[i + 1] - '0'; for (int j = 0; j < count; j++) { putchar(ch); } i++; } else { putchar(ch); } } putchar('\n'); return 0; }
这段代码尝试实现一个简单的“解压缩”功能:读取一个字符串,如果某个字符后面跟着数字(2-9),就将该字符重复数字指定的次数;否则直接输出该字符。

代码逻辑基本正确,但有一个关键问题:当字符后面跟着数字时,程序会跳过数字字符(通过 `i++`),但数字本身可能不是紧跟在字符后面,或者数字可能出现在字符串末尾附近,导致访问越界。

- 检查 `str[i + 1]` 时,需要先确保 `str[i + 1]` 不是字符串结束符 `'\0'`,否则可能访问到无效内存。
- 考虑数字 `'1'` 的情况:题目中只处理了 `'2'` 到 `'9'`,但 `'1'` 是否应该被当作普通字符输出?需要明确规则。