[英]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.