c언어 포인터 질문입니다

조회수 463회
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_STR_COUNT 5
#define MAX_TEMP_LENGTH 100


char* CREATE_ARRAY(char** pstr, int length);
void PRINT_ARRAY(char** pstr, int length);
void BUBBLE_SORT(char** pstr, int length);
void SWAP(char** x, char** y);

int main() {

    char* str = NULL;
    char** pstr = NULL;

    pstr = CREATE_ARRAY(&str, MAX_STR_COUNT);

    printf("\t[ Before Bubble Sort ]\n");
    PRINT_ARRAY(pstr, MAX_STR_COUNT);

    BUBBLE_SORT(pstr, MAX_STR_COUNT);

    printf("\t[ After Bubble Sort ]\n");
    PRINT_ARRAY(pstr, MAX_STR_COUNT);

    for (int i = 0; i < MAX_STR_COUNT; i++) {

        free(*(pstr + i));
    }
    free(pstr);

    return 0;

}
char* CREATE_ARRAY(char** pstr, int length) {

    char temp[MAX_TEMP_LENGTH];
    int len = 0;

    pstr = (char**)malloc(sizeof(char*) * length);
    if (pstr != NULL) {

        printf("Please input string.\n");

        for (int i = 0; i < length; i++) {

            gets_s(temp, MAX_TEMP_LENGTH);
            len = strlen(temp);

            *(pstr + i) = (char*)malloc(sizeof(char) * (len + 1));
            if (*(pstr + i) != NULL) {
                strcpy_s(*(pstr + i), len + 1, temp);
            }
            else exit(0);
        }
    }
    else
        exit(0);

    return *pstr;
}

void PRINT_ARRAY(char** pstr, int length) {

    for (int i = 0; i < length; i++) {

        printf("%s\n", *pstr);
        pstr++;
    }
    printf("\n");
}

void BUBBLE_SORT(char** pstr, int length) {

    int index = 0;

    for (int i = 0; i < length - 1; i++) {

        index = i;
        for (int j = i + 1; j < length; j++) {

            if (strcmp(*(pstr + index), *(pstr + j)) > 0)

                index = j;
        }

        SWAP(&pstr[index], &pstr[i]);
    }
}

void SWAP(char** x, char** y) {

    char* temp;
    temp = *x;
    *x = *y;
    *y = temp;

}

위 코드에서 오류가 발생하는 지점은

메인함수에

pstr=CREATE_ARRAY(&str, MAX_STR_COUNT);

이지점과 CREATE_ARRAY()함수안에서의 return pstr 이부분 입니다.

내용은

'=': 'char **' differs in levels of indirection from 'char *'
'return': 'char *' differs in levels of indirection from 'char **'

제가 함수 안에서 char **형의 변수 pstr을 넘겼고 메인함수에서 리턴값을 받는 변수도 char **형의 변수인데 왜 차원이 다르다고 하는지 이해가 안갑니다..ㅠ

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)