beerHolic_ 2022-12-07 16:52 采纳率: 85.7%
浏览 9
已结题

stack库中push()读取字符无效


#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack<char> s;
    char info[1000] = {0};
    scanf("%s",info);
    for(int i = 0; i<sizeof(info); i++) {
        //判断是否为符号
        if(info[i]=='+'||info[i]=='-'||info[i]=='*'||info[i]=='/'||info[i]=='('||info[i]==')') {
            s.push(info[i]);
        }
    }
    printf("%c",s.top());

}

img


请大佬指教问题出在哪里

  • 写回答

1条回答 默认 最新

  • ShowMeAI 2022-12-07 16:56
    关注

    望采纳

    您的代码中存在几个问题。

    首先,您在读入字符串时使用了 scanf 函数。在这个函数中,您没有指定字符数组的长度,所以可能会导致缓冲区溢出,即在数组 info 中写入超出数组长度的数据。

    为了避免这个问题,您可以使用 fgets 函数来读入字符串,并指定字符数组的长度。例如:

    fgets(info, 1000, stdin);
    

    其次,您在循环中使用了 sizeof 函数,并将它用作循环的终止条件。然而, sizeof 函数返回的是字符串数组的总字节数,而不是字符串的长度。所以,您的循环会一直执行,直到访问到数组的无效内存区域。

    为了避免这个问题,您可以使用 strlen 函数来检查字符串的长度,并将它用作循环的终止条件。例如:

    for (int i = 0; i < strlen(info); i++) {
        // 判断是否为符号
        if (info[i] == '+' || info[i] == '-' || info[i] == '*' || info[i] == '/' || info[i] == '(' || info[i] == ')') {
            s.push(info[i]);
        }
    }
    

    综上所述,下面是修改后的代码:

    #include <iostream>
    #include <stack>
    #include <cstring>
    using namespace std;
    
    int main() {
        stack<char> s;
        char info[1000] = {0};
        fgets(info, 1000, stdin);
        for (int i = 0; i < strlen(info); i++) {
            // 判断是否为符号
            if (info[i] == '+' || info[i] == '-' || info[i] == '*' || info[i] == '/' || info[i] == '(' || info[i] == ')') {
                s.push(info[i]);
            }
        }
        printf("%c", s.top());
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月15日
  • 已采纳回答 12月7日
  • 创建了问题 12月7日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度