2013-10-21 5 views
-1

Предположим, у меня есть char * str, и я еще не знаю ее размеров, поэтому могу только объявить его. Затем я передаю его функции, эта функция будет знать размер ее, чтобы она инициализировала и установила ее. Как я могу это сделать?C - передать неинициализированную переменную в функцию

char * str; 
func(&str); 

и

void func(char ** str) { 
    // initialize str... 
} 
+1

downvoters - берут только второй, чтобы дать повод. – ryyker

+1

нет никакой магии при распределении памяти для переменной. В какой-то момент и каким-то способом вы должны указать значение _size_, чтобы аргументы функций, таких как 'malloc()' или 'calloc()', могли быть вызваны правильно. *** Было бы также хорошо, если бы вы разместили код, который у вас есть, показывая хотя бы некоторые усилия для решения проблемы. *** – ryyker

+0

Спасибо, извините. Я добавил некоторый код, чтобы прояснить вопрос для других. – sina

ответ

2
#define SIZE 10 //or some other value 

или

const int SIZE = 10; //or some other value 

Тогда:

void init(char** ptr) // pass a pointer to your char* 
{ 
    *ptr= malloc(SIZE); //of any size 
} 

int main() 
{ 
    char *str; 
    init(&str); //address of pointer str 
    //...Processing 

    free(str); 
    return 0; 
} 
+0

Я бы поднял, если вы удалили 'sizeof (char)' ... –

+1

@PaulGriffiths да, я согласен, что C определяет 'sizeof (char)' равно 1, всегда (и C++ тоже), но я думаю, что OP новичок, поэтому я добавил. В любом случае я бы использовал 'char * ptr = malloc (SIZE * sizeof (* ptr));' – P0W

+0

+1 для 'sizeof (* ptr)' – sina

Смежные вопросы