У меня есть этот заголовок:C + как изменить массив символов в функции
MvProjectQueue & operator >> (char *);
И я должен написать функцию встречи этой спецификации. (моя функция должна «возвращать» массив символов с помощью оператора >>
)
Мне нужно изменить переданный аргумент, то есть получить массив символов при вызове моей функции и изменить его (на месте).
Обычно я хотел бы использовать
MvProjectQueue & operator >> (char **);
получил указатель на char *
и я решил его легко, используя что-то вроде этого:
#include <iostream>
using namespace std;
class SimpleShowcaseObject
{
public:
SimpleShowcaseObject(){};
~SimpleShowcaseObject(){};
SimpleShowcaseObject & operator >> (char ** p_ch)
{
*p_ch = "changed";
cout << "in scope: " << *p_ch << endl;
return *this;
}
};
int main(void)
{
char *ch = new char[10];
ch = "hello";
SimpleShowcaseObject o = SimpleShowcaseObject();
cout << "original: " << ch << endl;
o >> &ch;
cout <<"changed: " << ch << endl;
delete[] ch;
cin.get();
return 0;
}
Но это:
#include <iostream>
using namespace std;
class SimpleShowcaseObject
{
public:
SimpleShowcaseObject(){};
~SimpleShowcaseObject(){};
SimpleShowcaseObject & operator >> (char *ch)
{
ch = "changed";
cout << "in scope: " << ch << endl;
return *this;
}
};
int main(void)
{
char *ch = new char[10];
ch = "hello";
SimpleShowcaseObject o = SimpleShowcaseObject();
cout << "original: " << ch << endl;
o >> ch;
cout <<"changed: " << ch << endl;
delete[] ch;
cin.get();
return 0;
}
исполняет и отпечатков:
original: hello
in scope: changed
changed: hello
, и я хотел бы иметь
original: hello
in scope: changed
changed: changed
(отредактированные несколько раз, большое спасибо всем за пытается помочь!)
... так вы решили проблему? –
еще нет, проблема в том, что i _have_ _to_ использует заголовок выше – Tortaneli
Вы можете передать выделенный массив символов и скопировать его в свой оператор, но тогда, конечно, функция не могла контролировать длину массива. Это действительно не похоже на метод, возвращающий char *. – anhoppe