구조체 포인터 다뤄보기

  • 아래 코드가 있다
typedef struct    string_struct
{
    int         size;
    char        *str;
    char        *copy;
}                string_s;

struct string_struct    *ft_table_to_struct(int ac, char **av)
{
    int                 i;
    struct string_struct  *data_arr;

    if (!(data_arr = malloc((ac + 1) * sizeof(struct string_struct))))
        return (0);

    i = 0;
    while (i < ac)
    {
        data_arr[i].size = ft_strlen(av[i]);
        data_arr[i].str = av[i];
        data_arr[i].copy = ft_strdup(av[i]);
        i++;
    }
    data_arr[i] = (struct string_struct){0, 0, 0};

    return (data_arr);
}
  • 문자열을 담고있는 다중 배열을 구조체에 담아 반환하는 내용의 함수다.
  • 반환되는 구조체 배열을 순회하는 코드는 다음과 같다
string_s *stock_str;
char *arr[4] = {"Hello", "world", "nice", "day"};
stock_str = ft_strs_to_tab(4, arr);

while (stock_str->size)
{
    printf("%d, %s, %s \n", 
            stock_str->size, 
            stock_str->str, 
            stock_str->copy
        );
    stock_str++;
}
  • 구조체 포인터를 순회하기 위해서는 . 대신 ->로 참조한다.

Comments