c언어 포인터 질문입니다
조회수 475회
#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 **
형의 변수인데
왜 차원이 다르다고 하는지 이해가 안갑니다..ㅠ
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
댓글 입력