2016-09-24 8 views
-3

これは私が数日間苦労している宿題の一部です。 だから我々は今、この構造体Cのポインタから新しい構造体をインスタンス化

typedef enum { male = 0, female } gender; 

struct person { 
char name[30]; 
gender genderValue; 
int age; 
float weight;}; 

を定義し、我々はこの機能

int add(char* name, char* genderValueString, int age, float weight){} 

与えられており、我々は、その関数内に新しい人を構築するように求められます。 私はさまざまな方法を試しましたが、エラーが続いていて、名前を正しく取得できません。

struct person newperson = {.name = *newname, //...rest of code..}; 

のみを読み取り、残りの文字は無視します。 新しい人物に値を渡すにはどうすればよいですか?

これはどちらか動作しません:

最初はそのあなた逆参照ポインタ変数newnameです:

char newname[30]; 
strcpy_s(newname, 30, name); 
struct person newperson = { .name = newname //...} 
+0

Cで 'char'配列(または"文字列 ")をコピーするには、それぞれの' char'を個別にループしてコピーする必要があります。 – ray

+0

'newname'と' .name = newname'を取り出して、イニシャライザの後に '.name'に' strcpy'を使います。 –

答えて

0

2つの問題があります。これは、ポインタが指している値を返します。これは実際には文字列の最初の文字です。

2番目の問題は、ポインタまたは別の配列で配列を初期化できないことです。 アレイをコピーする必要があります。文字列の場合は、strcpy(または利用可能であればstrcpy_s)を使用してください。

+0

これはうまくいきません: 'char newname [30]; \t strcpy_s(newname、30、name); \t struct person newperson = {.name = newname // ...} ' –

+0

@ NidhalSelmi構造体' name'が配列であるためです。 *その配列にコピーする必要があります。 –

関連する問題