为啥我的程序在实际应该执行之前执行?

Posted

技术标签:

【中文标题】为啥我的程序在实际应该执行之前执行?【英文标题】:Why my program executes before when it actually supposed to?为什么我的程序在实际应该执行之前执行? 【发布时间】:2020-04-28 19:48:55 【问题描述】:

好的,我已经写了一个代码,这个程序一直运行到第一个while循环而不执行整个程序。我绑定了多种方法,例如创建函数,但面临同样的问题。

#include <iostream>
#include <string>
using namespace std;
int main()

    string str1, str2, temp;
    string *ptr1, *ptr2, *ptrtemp;
    int i, j;
    cout << "Enter string A: ";
    getline(cin, str1);
    cout << "Enter string B: ";
    getline(cin, str2);

    ptr1 = &str1;
    ptr2 = &str2;
    //swaping
    ptrtemp = ptr1;
    ptr1 = ptr2;
    ptr2 = ptrtemp;

    cout << "Now String A is= ";
    i = 0;
    while (i < str2.size())
    
        cout << *ptr1;
        ptr1++;
        i++;
    

    cout << "Now String B is= ";
    j = 0;
    while (j < str1.size())
    
        cout << *ptr2;
        ptr2++;
        j++;
    
    return 0;

【问题讨论】:

首先,你应该学会正确缩进你的代码,这样更容易理解执行流程。然后,您应该在调试器中单步调试代码,以便在执行代码时跟踪它,这很可能让您在没有我们帮助的情况下自己解决问题。如果您不知道如何使用调试器,那么现在是学习的最佳时机。 调试器就是炸弹。可能我有时间在学校运行 Champions 游戏的唯一原因是尽早弄清楚如何使用 Turbo Debugger。 ptr1++ ptr1 不指向string 对象之后,取消引用*ptr1 是未定义的行为 - 在您的情况下,程序崩溃并终止。 对不起,我不知道如何使用调试器,我现在将艰难地学习使用它。感谢您的帮助:) 请不要对学习使用调试器犹豫不决! ;) 但你绝对应该学习如何使用它。 【参考方案1】:
string *ptr1, *ptr2, *ptrtemp;
...
    ptr1++;

所以,ptr1 指向一个字符串。然后增加它的值,使其指向其他字符串。但是没有其他字符串可以指向。

我怀疑你在想ptr1++; 会以某种方式导致ptr1 指向同一字符串中的不同字符。但它不可能做到这一点。 string * 只能指向一个字符串,它不能指向一个字符串中的一个字符。

【讨论】:

我认为字符串就像 char 数组一样工作,这就是为什么我做错了,现在我已经删除了循环,它按预期工作,谢谢你的帮助,我真的很感激。

以上是关于为啥我的程序在实际应该执行之前执行?的主要内容,如果未能解决你的问题,请参考以下文章

我的电脑是win7的为啥netstat 命令执行不了啊?

为啥 esky 创建 2 个可执行文件?

为啥我的 AsyncTask 在应用程序启动期间没有执行?

为啥我的 Flutter 应用程序在执行时没有构建?

为啥我的 python DataFrame 执行如此缓慢

为啥我的 Qt 应用程序在执行时不显示 GUI?