通过引用字符数组传递

时间:2015-11-25 23:14:51

标签: arrays pointers reference char

我试图将位于_name中的字符数组传递给名为name的char引用。

但是,当将数组指针传递给引用时,它只显示第一个字符而不是整个字符串。

我的问题是你如何创建一个Character引用数组来将原始指针复制到它然后显示它?如item.cpp中所示,我们将_name指针复制到name的引用中,然后返回name,但它只显示字符串的第一个字符。

我只会显示我的代码的相关部分。

Item.cpp:

void Item::name(const char * name){

        strncpy(_name, name , 20);
}
const char& Item::name() const{
        char& name = *_name;
        return name;
}

ItemTester.cpp:

  

主():

int main(){
  double res, val = 0.0;
  fstream F;
  SItem Empty;
  SItem A("456", "AItem", 200);
  SItem B("567", "BItem", 300, false);
  //cout << A.name() << endl;
  B.quantity(50);
  //cout << Empty << endl;
  cout << A << endl << B << endl << endl;
  cout << "Enter Item info for A: (Enter 123 for sku)" << endl;
  cin >> A;

  cout << "Copying A in C ----" << endl;
  SItem C = A;
  cout << C << endl << endl;
  cout << "Saving A---------" << endl;
  A.save(F);
  cout << "Loading B----------" << endl;
  B.load(F);
  cout << "A: ----------" << endl;
  cout << A << endl << endl;
  cout << "B: ----------" << endl;
  cout << B << endl << endl;
  cout << "C=B; op=----------" << endl;
  C = B;
  cout << C << endl << endl;;
  cout << "Operator ==----------" << endl;
  cout << "op== is " << ((A == "123") && !(A == "234") ? "OK" : "NOT OK") << endl << endl;
  cout << "op+=: A += 20----------" << endl;
  A += 20;
  cout << A << endl << endl;
  cout << "op-=: A -= 10----------" << endl;
  A -= 10;
  cout << A << endl << endl;
  cout << "op+=double: ----------" << endl;
  res = val += A;
  cout << res << "=" << val << endl << endl;
  return 0;
}
  

ostream写

virtual std::ostream& write(std::ostream& os, bool linear)const{

     return os << sku() << ": " << name() << endl
       << "Qty: " << quantity() << endl
       << "Cost (price * tax): " << fixed << setprecision(2) << cost();
    }

如果我错过了任何重要的细节并且用它来编辑我的帖子,请告诉我。

2 个答案:

答案 0 :(得分:1)

char&char的引用,因此只是一个字符。对字符数组的引用将是char*&

示例:

class Test
{
private:
    static const size_t maxlen = 100;
    char* _name;
public:
    Test() : _name(new char[maxlen+1]) {}
    ~Test()  {delete _name;}
    void name(const char* s)
    {
        if(strlen(s) >= maxlen)
            throw "too long";
        else
        {
            memcpy(_name, s, strlen(s) * sizeof(char));
            _name[strlen(s)] = '\0';
        }
    }
    char*& name()
    {
        return _name;
    }
};

int main()
{
    Test obj;
    obj.name("testname");
    cout<<"Name = "<<obj.name()<<endl;
    obj.name()[0] = '*';
    cout<<"After change: Name = "<<obj.name()<<endl;
    return 0;
}

编辑:

我会改变&#34; getter&#34;类似于:

char*& Item::name() {
        return _name;
}

实际上,如果你确实希望方法是&#34; const&#34;,在这个意义上,类的用户不应该更改数组的元素,或者数组的实际地址,那么你不需要返回一个char *&amp ;,你可以简单地返回const char *

const char* Item::name() const {
        return _name;
}

据我所知,char*&类型的目的是客户端能够更改地址的实际地址。

答案 1 :(得分:0)

正如CForPhone指出的那样,char&并不是你想要的,你可能意味着char*。但即便如此,使用char*表示字符串也适用于C.在C ++中,您应该使用std::string

const string Item::name() const{
        string name(_name);
        return name;
}