如何在c ++中使用strcpy

时间:2010-12-12 16:11:53

标签: c++ copy char

在c ++中,我有一个名为“Student.h”的文件

class LinkedList {
private: 

class Student {
public:

    int stId;
    char stName [20];
    char stMajor[20];
    double stAverage;
    Student * next;

    Student() {
        next = 0;
    }

    Student(int stId, char stName [20], char stMajor[20], double stAverage) {
        this.stId = stId;
        strcopy(this.stName, stName); // there is error here !
        strcopy(this.stMajor, stMajor);
        this.stAverage = stAverage;
    }

我该怎么办?!

5 个答案:

答案 0 :(得分:7)

this是C ++中的指针,而不是Java中的引用。另外,您需要strcpy()而不是strcopy()

试试这个

    strcpy(this->stName, stName); 
    strcpy(this->stMajor, stMajor);

P.S:在C ++中,始终建议优先使用std::string而不是C风格的数组

更简洁的代码版本就是这样的

struct Student {

    int stId;
    std::string stName;
    std::string stMajor;
    double stAverage;
    Student * next;

    Student():stId(),stAverage(),next()//prefer initialization-list to assignment
    {
    }

    Student(int stId, const std::string &stName, const std::string &stMajor, double stAverage){
      this->stId = stId,
      this->stName = stName ,
      this->stMajor = stMajor,
      this->stAverage = stAverage;          
    }
};

答案 1 :(得分:2)

  

我该怎么办?!

你应该:

  • 使用std::string代替原始数组。

  • 使用std::list而非发明自己的(除了了解链接列表的目的)。

  • 不表示正式参数中的数组大小,例如char stName [20];形式参数类型不保留大小信息,它只是转换为指针类型。

  • 通常避免直接使用this

  • 通常使用初始化列表而不是构造函数体中的赋值。

干杯&第h。,

答案 2 :(得分:1)

我认为你的意思是strcpy功能(没有 o )。

答案 3 :(得分:0)

this是一个指针,而不是一个引用,所以你必须使用指针解引用运算符:

    strcpy(this->stName, stName);

    strcpy((*this).stName, stName);

此外,我不建议使用char[20]作为学生姓名的数据类型 - 这很容易出现缓冲区溢出错误。您可以使用strncpy

克服此问题
    strcpy(this->stName, stName, 19);
    this->stName[20]=0;

但最方便的方法是使用std::string,可以通过分配方便地复制它。

最后,如果你为成员变量名选择了一些约定,你可以在没有this的情况下引用它们。例如:

class Student {
public:

    std::string m_stName;

...
    Student(int stId, std::string stName, ...) {
         m_stName=stName;

或甚至(使用初始化程序):

Student(int stId, std::string stName, ...) : m_stName(stName) {
     m_stName=stName;

答案 4 :(得分:0)

你能否使用std::string

string s1, s2 = "example";
s1 = s2;

无论如何,问题是在C ++ this中返回指针,因此this.stId错误,正确的形式为this->stId,或者{ {1}}。