我无法为动态cstring分配值并修改它们

如何解决我无法为动态cstring分配值并修改它们

对于家庭作业问题,我需要实现一个cstring类和重载运算符。但是,我在初始化char数组时遇到麻烦。在以下代码中,

StringClass::StringClass()
{
    c = new char[10];
    c = "Default";
    stringlength = strlen(c);
}
#pragma once
#include <fstream>
class StringClass
{
private:
    char* c;
    int stringlength;
public:
    StringClass();
    ~StringClass();
    void print()const;
    StringClass(char*,int);
    StringClass(const StringClass*);
    StringClass& operator=(const StringClass*);
    friend std::istream& operator>>(std::istream&,StringClass*);
    friend std::ostream& operator<<(std::ostream&,const StringClass*);
    StringClass& operator+(const StringClass*);
    char operator[](int);
};

对于行c =“认”; 我收到一个错误const char *无法分配给char *,但我没有将c设置为const。如果将char c更改为const char c,则可以在构造函数中将其设置为default,但是无法对其进行进一步修改。为什么会这样?

编辑:我可以将声明更改为此,并且它可以正常工作。这是正确的方法吗?

c = new char[10]{ "Default" };

完整的实现文件

#include "StringClass.h"
#include <fstream>
#include <iostream>

StringClass::StringClass()
{
    c = new char[10];
    c = "Default";
    stringlength = strlen(c);
}

StringClass::~StringClass()
{
    c = NULL;
    delete c;
}

void StringClass::print()const
{
    for (int i = 0; i < 10; ++i)
        std::cout << c[i];

    std::cout<< std::endl;

    std::cout << stringlength;
}
StringClass::StringClass(const StringClass* p)
{
    for (int i = 0; i < 10; ++i)
    {
        c[i] = p->c[i];
    }
    stringlength = p->stringlength;
}

StringClass& StringClass::operator=(const StringClass* a)
{
    if (this == a)
        return *this;
    else
    {
        for(int i = 0; i < 10; ++i)
        c = &a->c[i];
        stringlength = a->stringlength;
    }
    return *this;
}

//std::istream& operator>>(std::istream& in,StringClass* a)
//{
    //in >> a->c >> a->stringlength;
    //return in;
//}

std::ostream& operator<<(std::ostream& out,const StringClass* a)
{
    out << a->c << " " << a->stringlength << std::endl;
    return out;
}

StringClass& StringClass::operator+(const StringClass* a)
{
    StringClass temp;
    temp.c = c + *a->c;
    temp.stringlength = stringlength + a->stringlength;
    return temp;
}

char StringClass::operator[](int a)
{
    return c[a];
}

解决方法

c = new char[10]{ "Hello" };

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?