簡體   English   中英

如何將一些字符放入先前分配的字符串對象中?

[英]How do I put some chars into a string object allocated previously?

為什么不能將一些字符填充到作為結構的一部分分配的“字符串”對象變量中?

struct person
{
    string firstname;
    string lastname;
    int age;
    char grade;
};

int main()
{
    person * pupil = new person;
    char temp[] = "Test";
    strcpy(pupil->firstname, temp); // THIS IS INVALID, WHY?

    return 0;
}

std::strings不是純字符數組,它們不能直接用作strncpy的目標。

對於您的代碼,您可以簡單地將字符串文字分配給現有的string對象,例如person對象的數據成員。 該字符串將基於文字創建一個內部副本。 例如,

person pupil;
pupil.firstname = "Test";

std::cout << pupil.firstname << std::endl; // prints "Test"

請注意,無需動態分配person對象。 也不需要臨時char數組。

請注意,在這種情況下,您還可以使用括號括起來的初始化程序列表來初始化成員:

person pupil = { "John", "Doe", 42, 'F' };

因為pupil->firstname不是字符指針。

為什么不讀std:string並將其與strcpy的手冊頁進行比較

因為strcpy使用C風格的字符串(char緩沖區),而std::string不是C風格的字符串。

您可以簡單地這樣做:

pupil->firstname = temp;

或者,完全避免使用temp

pupil->firstname = "Test";

更好的是,讓您的person的構造函數實際構造一個完整的對象:

struct person
{
    person ()
    : 
      firstname ("Test")
    {
    }

    string firstname;
    string lastname;
    int age;
    char grade;
};

int main()
{
    person * pupil = new person;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM