Указатель на конкретный элемент в массиве - C (СИ)
Формулировка задачи:
Помогите разрешить один вопрос, имеется глобальный массив указателей на строки. И есть функция которая должна вернуть три указателя на конкретные строки в массиве. Как это организовать?
char** x_global_array; //Заполняется из файла
size_t x_global_array_size;
void init()//Тут массив заполняется строками
{
size_t stringf=0;
FILE *file_name;
file_name = fopen ("text.txt","r");
while(fscanf(file_name, "%*[^\n]%*c") != EOF)
stringf++;
x_global_array_size=stringf;
x_global_array = malloc(stringf* sizeof(char*) );
file_name = freopen ("text.txt","r",file_name);
do {
stringf--;
x_global_array[stringf] = malloc(128*sizeof(char));
fgets ((x_global_array[stringf]),128,file_name);
x_global_array[stringf][strlen(x_global_array[stringf]) - 1] = 0;
}while (stringf != 0);
fclose (file_name);
}
void test(char* x, char* y, char* z) //функция которая должна вернуть указатели
{
x=x_global_array[0];
y=x_global_array[1];
z=x_global_array[2];
puts(x); //тут все выдает правильно
}
void main()
{
char* x;
char* y;
char* z;
test (x, y ,z);
puts(x); //Тут какие то кракозябры
}Решение задачи: «Указатель на конкретный элемент в массиве»
textual
Листинг программы
void test(char **x, char **y, char **z)
{
*x=x_global_array[0];
*y=x_global_array[1];
*z=x_global_array[2];
puts(*x);
}
int main(void)
{
char* x;
char* y;
char* z;
test (&x, &y ,&z);
puts(x);
return 0;
}
Объяснение кода листинга программы
- В функции
testуказательxприводится к указателю на первый элемент массиваx_global_array. - В функции
testуказательyприводится к указателю на второй элемент массиваx_global_array. - В функции
testуказательzприводится к указателю на третий элемент массиваx_global_array. - В функции
mainсоздаются три указателя:x,y,z. - В функции
mainуказательxпередается в функциюtestкак аргумент. - В функции
mainуказательyпередается в функциюtestкак аргумент. - В функции
mainуказательzпередается в функциюtestкак аргумент. - В функции
mainвыводится значение указателяxс помощью функцииputs. - В функции
mainвозвращается 0, что означает успешный конец работы программы.