편집 기록

편집 기록
  • 프로필 편집요청빌런님의 편집
    날짜2020.02.10

    c언어 포인터 질문입니다


    #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 **형의 변수인데 왜 차원이 다르다고 하는지 이해가 안갑니다..ㅠ

  • 프로필 알 수 없는 사용자님의 편집
    날짜2020.02.09

    c언어 포인터 질문입니다


    include

    include

    include

    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 *형의 변수인데 왜 차원이 다르다고 하는지 이해가 안갑니다..ㅠ