2013-06-26 3 views
0

다음 코드는 strtok을 사용하여 일부 char 토큰을 가져오고이 토큰을 하나씩 테이블에 유지하고 마지막으로이 토큰을 인쇄합니다. 내 오류가 표 행에 있습니다배열의 문자 포인터 값

error: invalid conversion from 'char* to 'char'' 

뭔가 내가 포인터와 문자에 대한 오해와 나는 (I)는 다음과 같은 형식을 갖고 싶어() 테이블 라인을 작성하는 방법을 모르겠어요. 같은 것을 시도했습니다

table[i][5+(i/2)] = *ptr; 

하지만 세그먼트 결함이 있습니다.

i = 0; 
int offset = 5; 
char* ptr; 
ptr = strtok(buff,"do something"); 
char table[1][10];  
while (ptr != NULL) 
{ 
    if (i == 0) 
    strcat(machine, ptr); 
    if (i == 2) 
    strcat(number, ptr); 
    if (i == 4) 
    strcat(hr, ptr); 
    if (i == 6) 
    strcat(dw, ptr); 
    if (i == 8) 
    strcat(vcc, ptr); 
    ptr = strtok(NULL,"do something"); 
    table[i][5+(i/2)] = ptr;  
    i++; 
} 
printf("Final: %s, %s, %s, %s, %s\n", machine, number, hr, dw, vcc); 
+7

'table [i] [5+ (i/2)] = * ptr;은 정확합니다. 세분화 오류는 'i'가 테이블 크기를 초과하기 때문입니다. – Maroun

답변

3

table[i][5+(i/2)] = ptr; 값 대신 주소를 할당하려고 했으므로 잘못되었습니다.

table[i][5+(i/2)] = *ptr;이 맞습니다. 이 값은 ptr에 있습니다.

세그먼트 오류i입니다. 그것은 배열 경계 밖의 주소를 참조하고 있습니다.

+0

그래서 배열의 크기를 늘리려고합니까? – dali1985

+1

@ dali1985 아니요! 'i'가 치수를 초과하지 않는지 확인해야합니다. 이것은 논리가 좋지 않다는 것을 나타냅니다. 루프를 재검토하고 테이블에 값을 삽입하기 전에 몇 가지 검사를 수행해야합니다. – Maroun