【发布时间】:2021-05-30 16:48:17
【问题描述】:
class A{
char info[256];
public:
char* getInfo();
A(char i[256]);
//A.cpp
#include "A.h"
char * A::getInfo(){
return(&info[256]);
}
A::A(char i[256]){
info[256]=i[256];
}
我正在为访问器而苦苦挣扎。当我尝试使用 getInfo() 时,我得到一个 char*,因此与
char test[256] = "test";
FractionException d(test);
for (int i = 0; i < 256; i++) {
cout << d.getInfo()[i] ;
}
我明白了
╠╠╠╠╠╠╠╠test
我想我做错了,但我想不通..
顺便说一句,VScode 也会警告我
info[256]=i[256]
告诉我可能会写入 257 个八位字节 (C6386) 但我不明白...
你能帮帮我吗?谢谢!
【问题讨论】:
-
此外,您不能从 C 或 C++ 中的函数返回数组。这种方式行不通。在 C++ 中使用
std::array而不是普通数组,您将能够从函数中返回它。而且你仍然需要修复损坏的构造函数。 -
你应该有一个没有参数的默认构造函数。
-
您应该通过引用传递数组,以便编译器在传递给函数时不会进行复制。
-
@SamVarshavchik 显示的访问器没有任何问题。它不是返回一个数组,而是返回一个指向数组第一个元素的指针,这是完全合法的。
-
@ThomasMatthews 数组不能按值传递,因此不会进行复制。在这段代码中,数组通过隐式指针传递给构造函数。