2016-09-24 3 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..}; 

첫 번째 문자 만 읽고 나머지는 무시합니다. 새 사람에게 전달 된 값을 얻으려면 어떻게해야합니까?

이 중 하나가 작동하지 않습니다

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

두 가지 문제가있다 :

첫 번째는 당신이 역 참조 포인터 newname 변수가. 이렇게하면 포인터가 가리키는 값을 얻을 수 있습니다. 실제로는 문자열의 첫 문자입니다.

두 번째 문제는 포인터 또는 다른 배열을 사용하여 배열을 초기화 할 수 없다는 것입니다. 당신은 복사 배열을 복사해야합니다. 문자열의 경우 strcpy (또는 사용 가능한 경우 strcpy_s)을 사용해야합니다.

+0

이것은 작동하지 않습니다 : 'char newname [30]; \t strcpy_s (새 이름, 30, 이름); \t 구조체 newperson = {.name = newname // ...}' –

+0

@NidhalSelmi 구조체'name' 멤버가 배열이기 때문에 가능합니다. * 배열에 복사해야합니다. –