为啥我的程序在实际应该执行之前执行?
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 数组一样工作,这就是为什么我做错了,现在我已经删除了循环,它按预期工作,谢谢你的帮助,我真的很感激。以上是关于为啥我的程序在实际应该执行之前执行?的主要内容,如果未能解决你的问题,请参考以下文章