Указатель на конкретный элемент в массиве - 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;
}

Объяснение кода листинга программы

  1. В функции test указатель x приводится к указателю на первый элемент массива x_global_array.
  2. В функции test указатель y приводится к указателю на второй элемент массива x_global_array.
  3. В функции test указатель z приводится к указателю на третий элемент массива x_global_array.
  4. В функции main создаются три указателя: x, y, z.
  5. В функции main указатель x передается в функцию test как аргумент.
  6. В функции main указатель y передается в функцию test как аргумент.
  7. В функции main указатель z передается в функцию test как аргумент.
  8. В функции main выводится значение указателя x с помощью функции puts.
  9. В функции main возвращается 0, что означает успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы