2010-12-13 8 views
0

숙제를 위해 CSV 파서를 작성하고 있습니다. 나는 일을 시작하려고 노력하고 있지만 문제가 생겼습니다. struct에서 "field"값에 값을 할당하는 것처럼 보이지 않습니다. 코드 그들은 제공 그들이 가지고C의 구조체 값에 배열 할당

typedef char f_string[MAX_CHARS+1] ; /* string for each field */ 

    typedef struct { 
     int nfields;      /* 0 => end of file */ 
     f_string field[MAX_FIELDS];   /* array of strings for fields */ 
    } csv_line ; 
20에서 정의 된 상기 상수

, 15 그들이 구조체가 보유하고 INT 무엇을 찾고, 그리고 그것은 f_string의 타입 정의로 채워야 배열을 보유 그들은 이전에 정의했다. 좋아, 좋아. 나는이 방법을 시도 :

f_string test = "Hello, Bob"; 
f_string testAgain = "this is dumb, k?"; 
f_string anArray[MAX_FIELDS] = {*test, *testAgain}; 

csv_line aLine; 
aLine.nfields = 3; 
aLine.field = *anArray; 

내가 테스트하는 역 참조가없는 testAgain, 나는 캐스트없이 포인터에 정수를 만드는 방법에 대한 경고를받을 경우 내가 "이 anArray"할

. 그래서 잘 모르겠어요 ... 또는이 포인터없이 그래서 나는 그들을두고 그러나 라인 :. "할당에서 호환되지 않는 유형 csv.c : 87 : 오류"

aLine.field = *anArray; 

오류를 반환 그 변수를 어떻게 할당해야합니까? 도와 주시면 감사하겠습니다!

답변

5

=을 사용하는 배열에 할당 할 수 없습니다. 자세한 설명은 this question을 참조하십시오. 또한

for (int i = 0; i < aLine.nfields; ++i) 
{ 
    strncpy(aLine.field[i], anArray[i], MAX_CHARS); 
} 

, 귀하가 제공하는 테스트 코드는 당신이 무엇을 기대하지 않을 것입니다 : 당신은 strcpy (또는 안전 strncpy) 함수를 사용하여 각 문자열을 복사해야합니다

.

f_string test = "Hello, Bob"; 
f_string testAgain = "this is dumb, k?"; 
f_string anArray[MAX_FIELDS] = {*test, *testAgain}; 

이 첫 번째 문자 testtestAgain를 복사합니다. 알린`에서

f_string anArray[MAX_FIELDS] = {"Hello, Bob", "this is dumb, k"}; 
+2

참고 배열이 이미하지 않는 한이 반드시 문자열을 null로 종료 할 것이라는 ''\ 0'' : 단지

f_string test = "Hello, Bob"; f_string testAgain = "this is dumb, k?"; f_string anArray[MAX_FIELDS]; strcpy(anArray[0], test); strcpy(anArray[1], testAgain); 

또는 : 당신은 같은 것을 할 필요가 .field [i] [MAX_CHARS]'. – caf

+0

위의 코드가 작동하지 않는다는 것을 깨달았습니다. 코드를 사용하면 strcpy를 사용해야합니다. 감사합니다! –