2009-07-01 12 views
1

もし私がcharポインタの配列ともう一つの静的な文字配列を持っていたら、ポインタの配列の各要素を静的配列の各要素にどのように割り当てるのですか?配列へのポインタの配列の割り当て

(小さな問題に問題を打破しようとしています。)

感謝。

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

char * []をchar [] []にコピーしますか? – dfa

+1

構文に基づいてわからない、私の美しいASCI art =を参照してください) –

+0

どの言語? –

答えて

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 

私は、文字列のNULL終端文字を指している、ここで第四のポインタを取得sizeofを使用しているため。

+1

Cで可変サイズの配列を作成することはできませんが、ptrArrの定義を次のように変更することはできません。char * ptrArr [3]; – DaveR

+0

あなたは正しいです、私はstrlenとsizeofと混在しています...実際には、これは動作するのでsizeofとして読んでいます(これはコードレビューでよく見られるエラーです)。今すぐ修正する – nik

+0

データ構造でこれを使用しようとすると、mallocできます。 – jkeys

0

CHAR "私がcharポインタの配列を持っている場合は、" ** 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; 
     } 

    } 
} 

希望します。

+0

*ポインタ*メモリを取り戻してくれてありがとう。 –

+0

これは長すぎるので、メモリを解放する方法は完全に間違っています。あなたはヒープから物を引っ張ってきていますので、ランダムなゴミがありますので、あなたは自由にしようとしていますか? –

+0

あまりにも長く私は同意します。空きメモリが完全に間違っている理由を説明できますか? –

1

あなたの回答を再提出しました。なぜあなたはすべてのポインタをalloc'dしたのか分かりません。 「私がcharポインタの配列を持っている場合は、」

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

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++; 
関連する問題