2016-03-24 15 views
0

文字列の文字を動的配列にコピーしようとしています。ここで私が働いているのは:文字列を配列にコピーする

void foo(const char * string, char ** final) 
{ 
    unsigned long n = strlen(string); 
    final = (char **)malloc(n+1); 
    for (int i = 0; i < n; ++i) 
    { 
     final[i] = string[i]; // error here 
    } 
} 

ビルドに失敗し、 "ここにエラー"と表示されている行を指しています。エラー:

私は配列を作成したときに/正しいポインタを取得する問題があると思います。 finalを想定し

+2

'result'は宣言されていません。 – EOF

+0

コンパイラはどのようなエラーを出すのですか? –

+0

プログラマーのように考えることを忘れないでください。_error here_を言ってはいけません。エラーに関するこれまでの詳細をすべて説明してください。そして、詳細を探します。私はあなたにコンパイルエラーがあるのを見ることができますが、良い悲しみです。 _error here_さんと交流しましょう。 –

答えて

3

は、出力パラメータであり、youllのループに割り当てるために、再度、

*final = malloc(n+1); 
for (int i = 0; i < n; ++i) { 
    (*final)[i] = string[i]; 
} 

をmalloc関数の結果を割り当てるために、それを逆参照する必要が再びこれはあなたの使用目的は以下のようなものであると仮定しています

input_str = "some text"; 
char* copy; 
foo(input_str, &copy); 

なぜapiがコピーを返さないのですか?

char* copy = foo(input_str); 
0

NULLハンドル(ポインタへのポインタ)が参照渡しされている場合、元のコードは実際には機能しません。 foo()がの最後のを返さない場合は、すでに初期化されていない限り、foo()の外では使用できません。その後、ハンドルは意味をなさないでしょう.foo()は2番目の文字列のアドレスを引数として受け取り、返す必要はありません。のは、オリジナルのポストに基づいて、この例のコードを考えてみましょう(デバッグプリントは含まれています):

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

void foo(const char * string, char ** final) 
{ 
(*final) = (char *)malloc(n+1);//we deference the address to reach and size the variable 
printf("From foo: "); 
for (unsigned long i = 0; i < strlen(string); ++i) 
{ 
    (*final)[i] = string[i]; 
    printf("%c",(*final)[i]); 
} 
printf("\n"); 
} 

ましょう仮定するのfoo()を簡単にするために、次のように別の関数から呼び出される:

int main(int argc, const char * argv[]) 
{ 
char *fin; 
char *str = "string"; 
foo(str, &fin);  
printf("From main: "); 
for(unsigned long j = 0; j < strlen(fin); j++) 
    printf("%c", fin[j]); 
printf("\n"); 
return 0; 
} 

それはうまくいくだろうが、何のために? IMHOと同じ結果を達成するためのより簡単な手段があります。これが助けてくれることを願って。

関連する問題