Исходный код не работает, если дескриптор NULL (указатель на указатель) передается по ссылке. Таким образом, было бы нецелесообразно выполнять все операции распределения внутри foo(): если foo() не возвращает final, он не может использоваться вне foo(), если уже не инициализирован, IMHO. Тогда дескриптор будет иметь смысл, foo() берет адрес второй строки в качестве аргумента и не должен возвращать ее. Давайте рассмотрим этот пример кода, основанный на исходное сообщение (отладочные печать в комплекте): Предположим, что Foo
#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");
}
Обратим() вызывается из другой функции следующим образом, для простоты:
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;
}
Это сработало бы, но зачем? Есть более простые средства для достижения того же результата, ИМХО. Надеюсь, это поможет.
'результат' не объявлен. – EOF
Какая ошибка дает вам компилятор? –
Пожалуйста, научитесь думать как программист: Не говорите _error здесь_. Объясните все детали, которые вы имеете до сих пор об ошибке. И затем ищите более подробную информацию. Я вижу, что у вас есть ошибка компиляции, но, хорошее горе; как здесь работает _error? –