Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[5953] Re:문자열 복사 함수 만들다가..
답변쓰고 싶은 이 [] 4078 읽음    2007-02-03 13:18
궁금증1 : 컴파일러마다 반응이 다릅니다. 특성인 거죠.. 볼랜드에서 무난히 컴파일 됩니다.
    에러 메시지 내용은 int 를 char *와 비교하려고 컨버전 하려는데 바꿀수 없다. 는 내용입니다.
궁금증2 :  3)  char* My_strcpy( char* dest, const char* src );
    위의 선언은 My_strcpy라는 함수는 char *dest와 const char *src를 받아서 char * 타입의 값을
    돌려주는 함수이다. 라는 겁니다. 함수 자체가 포인터로 선언되는 것은 나중에 더 진도 나가면 함수포인터라고
    따로 또 나옵니다.(이걸 말하신게 맞는지 모르겠지만..) 함수가 있는 위치를 가리키는 포인터이죠.. 함수포인터로
    함수를 나중에 호출하거나 써먹기 위해서 사용합니다.
궁금증3: 처음 공부할 때 혼란스러운 내용 중의 하나입니다. 이건 주의하실게 선언이냐, 사용이냐에 따라 뜻이 조금 달라진다는 것에 유의하시면 좀 더 쉽게 이해하실 수 있습니다. 3번째 라인 처럼 사용되는건 선언입니다. 단순히 변수의 타입이 포인터 이다라는 것이고, 실제 함수내에서 사용될 때 포인터 앞에 *이 붙게 되면 포인터가 가르키는 곳의 내용입니다. 일반적으로 포인터란 어떤 대상이 있는 곳의 주소값을 가지는 변수입니다.
char *dest;  이것은 dest는 char 형 대상의 주소값을 가지는 변수란 뜻입니다.
사용시에 *dest 는 dest의 값이 메모리의 주소이므로 그 주소에 가면 char형이 있다는 겁니다.
그래서 *dest = 'c'; 이렇게 쓸수 있습니다.
혹은 char src[10]; dest = src; 이렇게 하시면 dest의 값은 src의 주소값이 되며, *dest는 src[0]의 내용과 똑같습니다. 단지 표현이 틀릴 뿐입니다.
그래서 포인터를 받은 함수에서 포인터로 기술하기 어려우시다면 []를 사용해서 하셔도 된다는 것이죠.
do
{
    *dest++ = *src;
} while( *src++ );

이 내용은
int i=0;
do
{
    dest[i] = src[i];
} while(src[i++]);
와 같이 바꿔쓸 수도 있겠지요 혹은
     for(int i=0; src[i]; i++) dest[i] = src[i];
로 쓸수도 있지 않겠습니까?
이상입니다.

윤영광 님이 쓰신 글 :
: 에러나고 궁금해서 이렇게 올립니다. 책대로 코딩했는데도 에러가 나네요..
: 문자열 복사 함수 만들다가..
: visual c++ 사용하고 있구요(그래서 그런가??)
: 여튼, 코드는 아래와 같고요..
: KOREA 로 정의된 문자를 string 에 복사하는 함수 My_strcpy() 구현입니다.
:
: __________________________________________
: 1)  #include <stdio.h>
: 2)  #define KOREA    "대한민국"
: 3)  char* My_strcpy( char* dest, const char* src );
: 4)  void main( void ) {
: 5)      char string[100];
: 6)
: 7)     My_strcpy( string, KOREA );
: 8)
: 9)     puts( string );
: 10) }
: 11)
: 12) char* My_strcpy( char* dest, const char* src ){
: 14)     if( dest == (int)NULL || src == (int)NULL )
: 15)     {    if( *dest != (int)NULL ) *dest = (int)NULL;
: 17)         return NULL;
: 18)     }
: 19)     do
: 10)     {
: 20)         *dest++ = *src;
: 21)     }
: 22)     while( *src++ != (int)NULL );
: 23)     return dest;
: 24) }
: -----------------------------------------------------
:
: 궁금증1.
: 책대로 했는데 에러가 나네요
: 14번째줄 : error C2446: '==' : no conversion from 'int' to 'char *'
: 14번째줄 : error C2040: '==' : 'char *' differs in levels of indirection from 'int'
: 14번째줄 : error C2040: '==' : 'const char *' differs in levels of indirection from 'int'
: 포인터와 관련된것 같은데...머가 잘못된지는 모르겠네요. 에공~
:
: 궁금증2.
: 포인터의 일반적인 사용에 대해서 궁금한데요..
: 3번째줄처럼 함수자체가 포인터로 선언되는거와 그렇지 않은 것의 차이점이 뭔가요..^^;;
:
: 궁금증3
: 역시 포인터가 궁금한데요..(포인터는 아무래 공부해도 알쏭당쏭하네요~)
: My_strcpy( char* dest, const char* src )  이렇게 넘어온 'dest' 와 'src' 가
: *dest 일때와 desc 일체 가르키는게 정확히 전자가 '문자'이고 후자가 '문자의 주소'인가요?

+ -

관련 글 리스트
5952 문자열 복사 함수 만들다가.. 윤영광 4561 2007/02/02
5953     Re:문자열 복사 함수 만들다가.. 답변쓰고 싶은 이 4078 2007/02/03
5954         Re:Re:문자열 복사 함수 만들다가.. 윤영광 2727 2007/02/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.