求助,为什么会段错误?
  • 板块灌水区
  • 楼主oddmarks
  • 当前回复14
  • 已保存回复14
  • 发布时间2022/5/5 18:08
  • 上次更新2023/10/28 02:06:35
查看原帖
求助,为什么会段错误?
529929
oddmarks楼主2022/5/5 18:08

题目

P5730 显示屏

省流:数字可以显示成 3×5 的点阵(X 表示亮点,. 表示暗点)。现在给出数字位数l(不超过 100)和一串数字,要求输出这些数字在显示屏上的效果。,注意每个数字之间都有一列 . 间隔。

结果

在本地完全正常运行,但是OJ上全部RE,错误信息是 Segmentation fault with invalid memory reference.这是为什么???

代码

如下,主要用标准库的std::string.substr()std::cout

#include <bits/stdc++.h>
using namespace std;

string num[10] = {  // 打表
        "xxx"
        "x.x"
        "x.x"
        "x.x"
        "xxx",

        "..x"
        "..x"
        "..x"
        "..x"
        "..x",

        "xxx"
        "..x"
        "xxx"
        "x.."
        "xxx",

        "xxx"
        "..x"
        "xxx"
        "..x"
        "xxx",

        "x.x"
        "x.x"
        "xxx"
        "..x"
        "..x",

        "xxx"
        "x.."
        "xxx"
        "..x"
        "xxx",

        "xxx"
        "x.."
        "xxx"
        "x.x"
        "xxx",

        "xxx"
        "..x"
        "..x"
        "..x"
        "..x",

        "xxx"
        "x.x"
        "xxx"
        "x.x"
        "xxx",

        "xxx"
        "x.x"
        "xxx"
        "..x"
        "xxx"
};

int main() {
    int l;
    cin >> l;
    cin.get();  // 去除换行
    char seq[l + 1];
    cin.getline(seq, l + 1);

    for (int i = 0; i < l; ++i) {
        seq[i] -= '0';  // 令ascii码等于数字
    }

    for (int i = 0; i < 5; ++i) {
        cout << num[seq[0]].substr(i * 3, 3);
        for (int j = 1; j < l; ++j) {
            cout << '.' << num[seq[j]].substr(i * 3, 3);
        }
        cout << '\n';
    }
}
2022/5/5 18:08
加载中...