运行直接崩溃问题在哪?

img


/*(4)定义一个类String,为指针变量str动态申请空间并初始化。其要求如下:
私有成员:char *str;
公有成员:String(char *p); //构造函数,用参数对数据成员初始化。
void reverser(); //功能为实现对字符串的逆序排序。
void print(); //功能为输出数据成员。
~String(); //析构函数。
设计一个完整程序对该类进行测试, 如字符串为“student”通过调用对象的成员函数得到“tneduts”。
*/
#include <iostream>
#include <string>
using namespace std;
class String
{
private:
    char* str;
public:
    String(char* p)//构造函数,用参数对数据成员初始化。
    {
        str = new char[100];
        strcpy_s(str, sizeof(str), p);
    }
    void reverser()//功能为实现对字符串的逆序排序。
    {
        char *p1 = &str[0] ;
        char* p2 = &str[strlen(str) - 1];
        while (p1 < p2)
        {
            char t = 0;;
            t = *p1;
            *p1 = *p2;
            *p2 = t;
            p1++;
            p2--;
        }
    }
    void print() //功能为输出数据成员。
    {
        cout << str << endl;
    }
        
    ~String() //析构函数。
    {
        delete[]str;
    }
        
};
int main()
{
    char a[100] = "Hello World!";
    String s(a);
    s.print();
    s.reverser();
    s.print();
    return 0;
}

只能改成这样了:
代码:


/*(4)定义一个类String,为指针变量str动态申请空间并初始化。其要求如下:
私有成员:char *str;
公有成员:String(char *p); //构造函数,用参数对数据成员初始化。
void reverser(); //功能为实现对字符串的逆序排序。
void print(); //功能为输出数据成员。
~String(); //析构函数。
设计一个完整程序对该类进行测试, 如字符串为“student”通过调用对象的成员函数得到“tneduts”。
*/
#include <iostream>
#include <string>
using namespace std;
class String
{
private:
    char* str;
public:
    String(char* p)//构造函数,用参数对数据成员初始化。
    {
        str = new char[100];
        strcpy_s(str, strlen(str), p);
    }
    void reverser()//功能为实现对字符串的逆序排序。
    {
        char* p1 = &str[0];
        char* p2 = &str[strlen(str) - 1];
        while (p1 < p2)
        {
            char t = 0;;
            t = *p1;
            *p1 = *p2;
            *p2 = t;
            p1++;
            p2--;
        }
    }
    void print() //功能为输出数据成员。
    {
        cout << str << endl;
    }

    ~String() //析构函数。
    {
        //delete str;
    }

};
int main()
{
    char a[100] = "Hello World!";
    String s(a);
    s.print();
    s.reverser();
    s.print();
    return 0;
}

效果:

img


有一个地方我注释了,析构函数那,你可以解开看看会发生什么,这里我也给你找到这个为什么了,你看下:

img