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と同じ結果を達成するためのより簡単な手段があります。これが助けてくれることを願って。
'result'は宣言されていません。 – EOF
コンパイラはどのようなエラーを出すのですか? –
プログラマーのように考えることを忘れないでください。_error here_を言ってはいけません。エラーに関するこれまでの詳細をすべて説明してください。そして、詳細を探します。私はあなたにコンパイルエラーがあるのを見ることができますが、良い悲しみです。 _error here_さんと交流しましょう。 –