2012-11-05 6 views
-1

과제를 다룰 예정입니다. 나는 구조체 시작 :구조체에 대한 포인터

strcpy(figures[i].figure_name,f_name); 

지금 내 코드를 수정하고 필요해야 다음과 같이

struct figures_struct 
{ 
    char figure_name[130]; 
    double figure_coordinates[1000000]; 
}; 

내가 파일에서 그림의 이름을 읽고, 내가 구조체로 저장 동적 메모리를 사용하십시오. 내가 그랬어 :

struct figures_struct 
{ 
    char figure_name[130]; 
    double figure_coordinates[100000]; 
}; 

struct figures_struct *figures = malloc(size * sizeof(struct figures_struct)); 

자, 어떻게 구조체에 그림 이름을 저장합니까? figures[i].figure_name이 작동하지 않는 것 같습니다. (포인터와 배열은 C 거의 상호 교환으로) 여전히 포인터와 함께 작동합니다

+0

오류가 표시되는 내용과 시도한 내용을 포함하면 유용합니다. –

+1

"작동하지 않는 것"은 무엇을 의미합니까? 'figures {i} .figure_name' 자체만으로는 아무런 문제가 없습니다. 'strcpy (figures [i] .figure_name, f_name)'는 완벽하게 잘 동작 할 것이다. – AnT

+0

구조 액세스에 대한 * exact * 구문이 작동합니다. 그리고 둘 다 당신의 색인 (i)이 결코 당신의 차원 (크기)을 초과하지 않을 것이라는 것을 암시합니다. 당신의 할당은 시간이 지남에 따라 구조체의 할당 된 수를 늘릴 수 있다는 것을 요구합니다. 왜냐하면 그것은 완전히 다른 질문 (및 대답)이기 때문입니다. – WhozCraig

답변

2

strcpy(figures[i].figure_name, f_name);

+3

괄호 안에있는 설명까지는 동의합니다. 괄호 안의 주석 (현재는 포인터와 배열이 C'_에서 거의 상호 교환 가능합니다)이 계속 작동하는 이유는 아니며 진술로서 정확하지는 않습니다. 포인터와 배열은 밀접하게 관련되어 있습니다. 특히 메모리가 할당되는 지점에서 교환 할 수 없습니다. 그러나'strcpy()'가 여전히 작동하는 이유는 'figures [i]'가 이전처럼 구조체이기 때문에 동일한 초기화 기법이 구조체에서 작동한다는 것입니다. –

+0

@JonathanLeffler 아하 나의 나쁜, 나는 당신이 나에게 말하고있는 것을 정확하게 의미하는 것을 거의 사용했다. –

+2

@JonathanLeffler : 아마 포인터 rvalues가 필요한 곳에서 배열을 사용할 수 있다고 말하는 것이 더 적절할 것입니다. –

0

그것은 "내가" "크기"보다 작 즉시 작동합니다.

관련 문제