2009-07-01 86 views
1

如果我有一個char指針數組和另一個靜態數組字符,我該如何將指針數組的每個元素分配給靜態數組的每個元素?指定數組指針數組

(試圖將問題分解成更小的問題。)

謝謝。

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

你想複製一個char * []到char [] []? – dfa 2009-07-01 16:25:03

+1

基於語法不確定,請看我美麗的ASCI藝術=) – 2009-07-01 16:36:16

+0

哪種語言? – 2009-07-01 16:37:03

回答

3

我在這裏即興托米的答案。
其他人對於這樣的問題太長了。

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 

,因爲我用你sizeof這裏得到一個第四指針所指向的字符串NULL終止字符。

0

「如果我有炭指針數組」

字符** ARR;

「和字符的另一靜態數組」

炭STR [] =「您好」

「我怎麼分配指針數組中的每個元素的每個元件一個靜態數組?「

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; 
     } 

    } 
} 

希望它有幫助。

1

Aditya重新提交了您的答案。我不確定你爲什麼要分配所有的指針。 「如果我有炭指針數組」

char** arr; 

「和字符的另一靜態數組」

char str[]="Hi there"; 

「我怎麼指針數組中的每個元素分配給的每個元素靜態數組?「

len = strlen(str); 
arr = (char **) malloc(sizeof(char *) * len); /*typecasting for C++ */ 
if (arr != NULL) 
{ 
    int i=0; 
    for(i=0; i < len; i++) 
    arr[i]=&str[i]; 
} else { 
    // error handling 
} 

當然,這些指針只有在靜態str數組存在的情況下才有效(通常直到退出語句塊爲止)。非常容易出錯,但這正是您的要求。

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; 
} 
2
char chrArr[] = "asd"; 
char* ptrArr[strlen(chrArr)]; 

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

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