次の行動の理由を自分で説明することはできません。1 つは char* として、もう 1 つは char[] として 2 つのテキストを初期化し、それらを構造体に入れます。どちらも構造では問題ないように見えますが、メインに戻ると、2 番目のものが失われ、最初のコンパイラ警告が表示されますが、これは理解できます (文字列定数から char* への非推奨の変換)。
これは私がここで尋ねる最初の質問であり、間違ったことをお詫び申し上げます。はい、検索しようとしましたが、char* と char[] に関連して、多くの Q&A が表示されますが、私が抱えているネストされた問題に似たものはありません。
添付のコードから、次の出力が得られます。
get_struct: 5 test test2
main: 5 test
(最後のtest2がありません)
だからコード:
#include <iostream>
typedef struct {
double a_double;
char* a_char1;
char* a_char2;
} testStruct;
testStruct make_struct(double d, char* c1, char* c2) {
testStruct t;
t.a_double = d;
t.a_char1 = c1;
t.a_char2 = c2;
return t;
}
void get_struct(testStruct &t) {
char* test_char1 = "test";
char test_char2[] = "test2";
double test_double = 5;
t = make_struct(test_double, test_char1, test_char2);
std::cout << "get_struct: " << t.a_double << " "
<< t.a_char1 << " " << t.a_char2 << std::endl;
}
int main() {
testStruct t;
get_struct(t);
std::cout << "main: " << t.a_double << " "
<< t.a_char1 << " " << t.a_char2 << std::endl;
return 0;
}