2012-04-10 2 views
0

symbol_and_header에 encoding_symbols_tab [0]에 보관 된 모든 데이터를 저장하려고합니다. 'encoding_symbols_tab'은 (는) 예 : 500 * 1024 문자.void 표현식을 잘못 사용했습니다. void 포인터가 가리키는 배열에서 정보 복사하기; char 포인터로 가리키는 배열에

이 예제에서 다음 코드가 수정되었습니다. 내가 얻을이 코드를 실행하면

void** encoding_symbols_tab; 

(..) 

char* return_symbol_and_header_array() 
    { //abcd 
    char* symbol_and_header = (char*)calloc(1, 1024 + 14); 
    (..) 
    int k=0; 
    for (k=0; k < 1024; k++) 
    { 
    symbol_and_header [k+14] = (char) encoding_symbols_tab [0][k]; 
    } 

    return symbol_and_header; 
    } 

이 '오류 : 무효 표현의 잘못된 사용' 이 어떻게 ('무효 ** encoding_symbols_tab'의 유형을 변경하지 않고)이 문제를 해결하기 위해 코드를 변경해야합니다.? 이것은 C 프로그램입니다.

+0

'encoding_symbols_tab '은 어떻게 채워 집니까? 무엇이 포함되어 있습니까? – crazyjul

+0

'((char **) encoding_symbols_tab) [0] [k]' – keety

+0

참고로,'malloc()'(또는'calloc()')의 반환 값을 캐스팅 할 필요가 없습니다. – RastaJedi

답변

1

을 사용하면 문자 encoding_symbols_tab 점은, 왜 void *의를 가리키는로 선언 할

((char**)encoding_symbols_tab) [0][k]; 
+0

고마워요! 지금 그것은 일하고있다!! –

1

경우? 어떤 유형의 데이터도 가리 키지 않기 때문에 void * 포인터를 참조 해제 할 수 없습니다.

void **encoding_symbols_tab 대신 char **encoding_symbols_tab을 선언 할 수 있지만, 실제로는 실제로 가리키는 부분인지 확인하십시오. 다음을 수행해야합니다

  • encoding_symbols_tab하면 포인트를 500 * 1024 자 (예 : 512,000 자)의 평면 배열 : 귀하의 질문에 당신은 뭔가 다른이 될 수 있음을 시사
    • encoding_symbols_tabchar *
    • 선언 자신들의 각 점 500 char * 포인터 배열로 encoding_symbols_tab[x*1024+k]
  • 경우 encoding_symbols_tab 점으로 그 요소를 참조 1,024 문자 배열 한 다음 반드시 :
    • encoding_symbols_tab[x][k]
    • (500 중) 제 사이즈 x을 가정 할

kencoding_symbols_tab 참조

  • char ** 같은 요소 선언은 불허 차원 (1024 자 외).

  • 관련 문제