2015-12-13 6 views
-4

У меня есть этот заголовок: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 

(отредактированные несколько раз, большое спасибо всем за пытается помочь!)

+0

... так вы решили проблему? –

+0

еще нет, проблема в том, что i _have_ _to_ использует заголовок выше – Tortaneli

+0

Вы можете передать выделенный массив символов и скопировать его в свой оператор, но тогда, конечно, функция не могла контролировать длину массива. Это действительно не похоже на метод, возвращающий char *. – anhoppe

ответ

0

Ваша функция получит то, что должно быть буфер вы можете написать:

SimpleShowcaseObject & operator >> (char *ch) 
{ 
    //ch = "changed";// with this you are changing the value of the pointer, not what you want 
    strcpy (ch, "changed"); 
    cout << "in scope: " << ch << endl; 

    return *this; 
} 

Как другие уже отмечалось, это не хороший дизайн: ваш operator >> должен написать строку (char[]) в буфере, witho зная длину входного буфера; не хороший сценарий.

Смежные вопросы