【问题标题】:C++ If Statement Run-Time Check Failure #2C++ If 语句运行时检查失败 #2
【发布时间】:2017-12-30 18:36:28
【问题描述】:

我这里有一个代码:(忽略friends_name,没关系)

char friend_sex [1];

cout << "Please enter m if your friend is male or f if your friend is female\n";

cin >> friend_sex; 
    if (friend_sex == "m") cout << "If you see " << friends_name << "! please ask him to call me\n";

    if (friend_sex == "f") cout << "If you see " << friends_name << "! please ask her to call me\n";

当我运行它时,它会说

运行时检查失败 #2 - 变量“friend_sex”周围的堆栈已损坏。

【问题讨论】:

  • 我敢打赌,因为您有一个数组,流操作员将其设为字符串,而不是字符。
  • 由于friend_sex 衰减为指向char 类型变量的指针,而"m" 是指向char 类型常量的指针,因此这两个指针几乎是不可想象的价值相当。常量和变量怎么可能在同一个地址?

标签: c++ if-statement char cin


【解决方案1】:

两种解决方案:

  1. char friend_sex[1] 更改为char friend_sex,将"m" 更改为'm',将"f" 更改为'f'
  2. char friend_sex[1] 更改为char friend_sex[2]。并将==判断改为strcmp

【讨论】:

  • c++中,使用std::string::compare比较合适。
  • 不鼓励作为 C++ 程序员 #2。
  • 完全同意。
  • 谢谢:D 已经坚持了 2 小时.... 2 小时 AAAAAAAAAAAAHHHHHHHHHHHHHHHHHH
  • 我希望你使用 #1 解决方案。
【解决方案2】:

如果我说您使用 Visual Studio(由于错误消息),我认为我是正确的。

发生的事情被称为“缓冲区溢出”,它包括在内存中的缓冲区位置之后写入您的位置

为避免这种情况,您可以将friend_sex 的数据类型更改为std::string,这将解决您的问题

【讨论】:

    猜你喜欢
    • 2013-02-26
    • 2016-08-24
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 2021-10-14
    • 2018-02-02
    相关资源
    最近更新 更多