2009-05-01 10 views
2

외부 파일에서 텍스트를 읽는 프로그램을 작성하려고합니다 (줄마다 문자열 string int). 구조체는 주요 기능의 외부 정의된다c, struct 사용시 문제점

typedef struct Person { 
    char fname[15]; 
    char lname[20]; 
    unsigned long int birth; 
} clovek; 

I 라인마다 데이터를 덮어 쓸 수와 같이 배열 될 "clovek"을 필요로하지 않는다. 라인과 버퍼링 빨간색 :

fgets(buffer, 50, datafile); 

그럼 내가 구조체로 구문 분석하고 싶지만 내 문제가 발생 곳은 다음과 같습니다

int i = 0; 
while (buffer[i] != ' ') { 
    clovek.fname[i] = buffer[i]; 
    i++; 
} 

을 그리고 이것은 오류가 날 수 있습니다 : 예상 식별자 또는 '('전에 나는 또한 디버깅이 코드를 사용하고 싶어하지만, 그것뿐만 아니라 다른 오류를 제공

토큰 '.':

printf("fname, %s\n", clovek.fname); 

오류 : 'clovek'앞에 예상되는 표현

내 생각에 구조체를 사용하여 완전히 오해 한 것 같습니다.

+1

답변 중 하나를 제외하고는 사람들이 매우 기본적인 C 구문을 잘못 가져올 수있는 또 다른 무서운 예를 제공합니다. –

+0

구조체에서 복잡성, 요소 정렬의 또 다른 문제를 추가하겠습니다. Google은 귀하의 친구입니다. – KevinDTimm

+0

버퍼 오버 플로우가 일어나기를 기다리는 것은 물론이고 struct Person의 멤버를 C ​​문자열로 쓸모 없게 만드는 nul 터미네이션이 없다는 것을 말할 필요도 없습니다. – RBerteig

답변

10

clovekstruct Person의 별칭이 방법은 clovek는 Person 형의 변수가된다. typedef 키워드를 제거하거나 코드 어딘가에 struct Person 유형의 개체를 만듭니다. 현재 코드를 사용하면 다음을 수행 할 수 있습니다.

clovek someone; 

while (buffer[ i ]) != ' ') { 
    someone.fname[ i ] = buffer[ i ]; 
/* .. */ 
5

귀하의 진술은 clovek를 구조 Person에 대한 별칭으로 정의합니다.

선언에서 "typedef"를 제거하십시오. 변수 선언에서

또는 더 나은, 별도의 구조체 선언 :

struct Person { 
    char fname[15]; 
    char lname[20]; 
    unsigned long int birth; 
}; 

struct Person clovek; 
+2

아마도 "struct Person clovek;"를 의미 할 것입니다. 두 번째 줄에. – millimoose

+0

Ooops, 네 말이 맞아. 너무 많은 C++ : –

+0

'struct Person clovek; –