[질문] 포인터 초보...char * 을 리턴하는 함수는 어떻게 받아야
글쓴이: hurryon / 작성시간: 목, 2003/05/08 - 11:39오후
[hurryon@note 0508]$ cat 2.c #include <stdio.h> char *arr_print(char *source, char *des); char *arr_print(char *source, char *des) { des = source; printf("%s\n", source); printf("%s\n", des); return des; } int main(void) { char *source = "hurryon"; char des[50]; /* des = arr_print(source, des); */ printf("%s\n", source); /* printf("%s\n", des); */ printf("%s\n", arr_print(source, des)); return(0); } [hurryon@note 0508]$
주석을 처리한 부분을 풀어도 될꺼 같은데 제대로 되지 않아서 주석 처리
했습니다. 저렇게 char * 함수을 받는것이 아닌지요? 그냥 printf 문에
바로 쓰니 되긴하지만요.
Forums:
[quote] char des[50];
배열과 pointer는 속성상 상당히 일치하기 때문에,
pointer를 pointer에 대입하는 꼴로 생각하면,
des 값이 arr_print 가 return 하는 값으로 대치 될 뿐입니다.
원하는 기능은 des가 가리키는 곳에 arr_print 가 넘기는 pointer가
가리키는 내용입니다. 그렇게 하려면, strncpy나 memcpy를 쓰시는 것이
맞는 방법입니다.
---
http://coolengineer.com
Re: [질문] 포인터 초보...char * 을 리턴하는 함수는 어떻게 받
des 는 포인터 상수 입니다. 이러한 대입은 마치,
1 = a;
이렇게 쓴 것과 마찬가지입니다. 대개 좌측은
l-value 가 필요하다고 나올겁니다.
char* s = arr_print(source,des) 이렇게 하는 건 문제 없습니다.
strcpy 를 쓰는 여부는 님께서 무엇을 의도하느냐에 따라
달라질 것이라 봅니다.
Orion Project : http://orionids.org
배열명은 포인터 상수 입니다.
"배열명은 (배열의 첫번째 요소를 가르키는)포인터 상수 입니다"
즉, char des[5];
에서 des == &des[0] 을 의미하는 포인터 상수 입니다.
상수이기 때문에 대입이 안됩니다. (lvalue 로 쓸수 없습니다.)
예를들면 int i,j = 10, *pi ; 가 있다고 보면
pi = &j ; <--- 이건 당연히 됩니다. 포인터 변수니까.
&i = &j ; <--- 이건 안됩니다. i의 주소는 이미 상수니까.
lvalue 로 쓸수 없습니다.
memcpy(&i,&j, sizeof(j)); <-- 이것도 되겠지요.
이상과 같이 des 는 &des[0] 이고 위의 &i 와 같은 자리에만 사용가능합니다.
내 자식들도 나처럼 !!
댓글 달기