2009-07-01 14 views
1

배열에 char 포인터와 다른 정적 배열이있는 경우 정적 배열의 각 요소에 포인터 배열의 각 요소를 어떻게 할당합니까?배열에 포인터 배열 할당

(문제를 더 작은 문제로 분해하려고 시도합니다.)

감사합니다.

array of pointers       array of char 
    +----+           +----+       
    | |  ---->        | | 
    | * |           | h | 
    +----+           +----+ 
    | * |           | i | 
    | |   ---->        | | 
    +----+           +----+ 
+2

char * []를 char [] []에 복사 하시겠습니까? – dfa

+1

구문에 따라 확실하지 않은가, 내 아름다운 ASCI 아트 =를 참조하십시오) –

+0

어떤 언어? –

답변

3

는 여기 토미의 답변을 즉흥적하고있다.
다른 질문은 너무 길기 때문입니다. 내가 sizeof을 사용하기 때문에 문자열의 NULL 종료 문자를 가리키고 있는지

char chrArr[] = "asd"; 
char* ptrArr[sizeof(chrArr)]; 
int i; 

// A simple assignment loop over 'i' pointers and chars 
for (i=0; i< sizeof(chrArr); i++) 
    ptrArr[i] = &chrArr[i]; 
    --------- ---------- 
// pointer = address of character 

당신은 여기에 4 포인터를 얻는다.

+1

나쁘지는 않지만 C에서 가변 크기 배열을 만들 수 없습니다. ptrArr의 정의를 다음과 같이 변경하십시오. char * ptrArr [3]; – DaveR

+0

맞습니다. 저는 strlen과 sizeof가 섞여 있습니다. 사실 sizeof로 읽습니다. (코드 검토에서 사람들이 자주 보았던 오류입니다.) 작동합니다. 지금 수정하기 – nik

+0

데이터 구조에서 이것을 사용하려고한다면 malloc 할 수 있습니다. – jkeys

0

문자 "나는 문자 포인터의 배열이있는 경우"** 편곡;

"문자의 또 다른 정적 배열"

문자의 str을 [] = "안녕하세요"

은 "내가 어떻게 포인터의 배열의 각 요소를 할당 할 각 요소에 static array? "

len = strlen(str); 
arr = (char **)malloc(sizeof(char *) * len);/*typecasting for C++ */ 
if (arr != NULL) 
{ 
    for(i=0; i < len; i++) 
    { 
    arr[i] = (char *)malloc(sizeof (char)); /* typecasting for C++ */ 
    if (arr[i] != NULL) 
     { 
     arr[i] = &str[i]; 
     } 
    else 
     { 
     /*If you choose to return from here, 
      * free allocated memory upto now 
      */ 
     for(j=0;j<i;j++) 
      { 
      free(arr[j]); 
      } 
     free(arr); 
     return 1; 
     } 

    } 
} 

희망이 있습니다.

+0

* 포인터 * 메모리를 가져와 주셔서 감사합니다. –

+0

이것은 길기 때문에 메모리를 비우는 방식이 완전히 잘못되었습니다. 힙에서 물건을 뽑아서 무작위로 쓰레기가 나왔는데, 그 다음 무작위로 쓰려고합니다. –

+0

너무 길다 나는 동의한다. 기억이 완전히 틀린 이유를 설명 할 수 있습니까? –

1

Aditya가 귀하의 답변을 다시 제출했습니다. 왜 모든 포인터를 alloc'd 확실하지 않습니다.

char** arr; 

"문자의 또 다른 정적 배열"

char str[]="Hi there"; 

"나는 문자 포인터의 배열이있는 경우" 는 "어떻게의 각 요소에 대한 포인터의 배열의 각 요소를 할당 할 정적 배열? "

물론이 포인터는 정적 str 배열이 존재할 때까지 (일반적으로 명령문 블록을 종료 할 때까지) 유효합니다. 매우 오류가 발생하기 쉽지만 이는 정확히 귀하의 요청입니다.

+0

OP는 "정적 배열의 각 요소에 포인터 배열의 각 요소를 할당하고 싶습니까?"..... 정적 배열의 각 요소는 char * 대신 char입니다. 그것이 각 요소에 대한 루프 내부에서 malloc 된 이유입니다. –

0
char **getPointers(char *initArr) { 
char **arr; 
int len, i; 

if(initArr == NULL) return NULL; 

/* + 1 for the null terminator */ 
len = strlen(initArr) + 1; 

arr = (char **) malloc(sizeof(char *) * len); 

/* since initArr is an array, we know the characters are contiguous in memory, 
    so let's trust pointer arithmetic instead of dereferencing references we 
    create */ 
for(i = 0; i < len; i++) arr[i] = initArr + i; 

return initArr; 
} 
+0

"어떻게 정적 배열의 각 요소에 포인터 배열의 각 요소를 할당합니까?"..... 정적 배열의 각 요소는 char * 대신 char입니다. –

2
char chrArr[] = "asd"; 
char* ptrArr[strlen(chrArr)]; 

char* chrPtr = chrArr; 
char** ptrPtr = ptrArr; 

while (*chrPtr) 
    *ptrPtr++ = chrPtr++;