Я пытаюсь доставить указатель на функцию, которая затем заполняет ее содержимым, чтобы вызывающая функция могла его использовать. Поскольку это всегда давало мне странные вещи в вызывающей функции, я написал простое представление о том, что я сделал:
#include <stdio.h>
#include <stdlib.h>
void bla(char *t)
{
t = (char*) malloc(5);
if (t != 0) {
t[0] = 'h';
printf("%c\n", t[0]);
}
}
int main(int argc, char **argv)
{
char b[10];
bla(b);
printf("%c\n", b[0]);
return 1;
}
Я не совсем уверен, что если он что-то делает, С передает копию аргумента. Нужно ли передавать указатель на указатель или есть лучшее решение?
EDIT:
Извините, ребята, но я не понял. Не могли бы вы просмотреть этот пример:
#include <stdio.h>
#include <stdlib.h>
void blub(char **t)
{
printf("%d\n", *t);
*t = (char*) malloc(sizeof(char) * 5);
*t[0] = 'a';
*t[1] = 'b';
printf("%d\n", *t);
printf("%d\n", *t[0]);
printf("%d\n", *t[1]);
}
int main(int argc, char **argv)
{
char *a;
blub(&a);
printf("%d\n", a);
printf("%d\n", a[0]);
printf("%d\n", a[1]);
return 1;
}
Вывод выглядит следующим образом:
./main
6154128
140488712
97
98
140488712
97
0 <== THIS SHOULD BE 98 AS ABOVE!?
Почему я получаю 98 в функции блафу и в основном это нулевой указатель ?! Я в полном замешательстве: /