c++ - 在动态内存区域中初始化 char 数组(在构造函数中)时出现问题
问题描述
在动态内存区域中初始化 char 数组(在构造函数中)时出现问题。如何初始化动态分配的内存类型 char*
class Funkcija
{
protected:
float k;
float n;
char* naziv;
#include "Funkcija.h"
#include <iostream>
using namespace std;
Funkcija::Funkcija()
{
k = 1;
n = 0;
naziv = new char;
naziv = 'Name';
}
解决方案
您没有为字符串分配足够的内存"Name"
(注意双引号)。您只分配 1 char
,并且'Name'
(单引号) 是一个多字节字符,不适合单个char
.
您需要更多类似的东西(请参阅3/5/0 规则):
class Funkcija
{
protected:
float k;
float n;
char* naziv;
public:
Funkcija();
Funkcija(const Funkcija &);
~Funkcija();
Funkcija& operator=(const Funkcija &);
};
#include "Funkcija.h"
#include <algorithm>
#include <cstring>
Funkcija::Funkcija()
{
k = 1;
n = 0;
naziv = new char[5];
std::strcpy(naziv, "Name");
}
Funkcija::Funkcija(const Funkcija &src)
{
k = src.k;
n = src.n;
naziv = new char[std::strlen(src.naziv)+1];
std::strcpy(naziv, src.naziv);
}
Funkcija::~Funkcija()
{
delete[] naziv;
}
Funkcija& Funkcija::operator=(const Funkcija &rhs)
{
if (&rhs != this)
{
Funkcija temp(rhs);
std::swap(k, temp.k);
std::swap(n, temp.n);
std::swap(naziv, temp.naziv);
}
return *this;
}
话虽这么说,你真的应该使用std::string
而不是char*
,让编译器为你处理所有这些细节,例如:
#include <string>
class Funkcija
{
protected:
float k;
float n;
std::string naziv;
public:
Funkcija();
};
#include "Funkcija.h"
Funkcija::Funkcija()
{
k = 1;
n = 0;
naziv = "Name";
}
推荐阅读
- android - 如果用户拒绝相机权限,如何在 OpenTok 中发布黑色视频或头像
- performance - Azure Functions - Java CosmosClientBuilder 初始连接速度慢
- c# - HttpWebRequest.GetResponse 总是返回“操作超时”
- python - 关于如何将尽可能多的列表放入不同容量的桶中的算法
- javascript - 如何倒数
- ansible - 需要获取语法来获取键值对
- r - 如何使用 R 编程中的索引号删除列表内向量中的特定元素
- encoding - MalformedInputException:使用 Files.readAllLines(Path.get("file").get(0); 读取文本文件时输入长度 = 1;
- maven - 我想从 Github Actions 中的 pom.xml 获取项目版本
- apache-spark - 如何在使用 Spark 读取时将数据分配到 X 分区?