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

C/C++ Q/A
[5210] Re:변수에 값을 변수로 사용하여는 방법 좀 알려 주세요
심성현 [] 1764 읽음    2005-08-07 16:24
김선태 님이 쓰신 글 :
: char k[10]="korea";
: char j[10];
: char korea="japan";
: char japan="korea";
:
: k변수에 들어있는 값 "korea"를 가지고 korea의 변수값(char korea="japan")
: "japan"을 j변수에 넣으려고 합니다.
: k의 변수에는 :korea"가 올수도 있고 "japan"이 올수도 있습니다.
:
: 예)
: k="korea" --> korea="japan" --> j [ "japan" ]
: k="japan" --> japan="korea" --> j [ "korea" ]
:
: 아시는 분이 계시면 알려 주세요.

일단
char korea="japan";
char japan="korea";
이 두 문장은 잘못된 문장입니다.

왜냐하면
"japan"   <-- 이것은
1. 연속적인 공간에 6바이트의 메모리를 할당하고
2. 각각의 바이트에 'j', 'a', 'p', 'a', 'n', '\0' 의 값을 대입시켜주고
3. 할당된 메모리의 시작번지, 즉 'j'의 주소를 반환합니다.
그러므로 변수 "japan" 을 대입하는 변수 korea는 문자 포인터형 (char *)로 또는 문자형 배열(char [])로 선언되어야 합니다. 엄밀히 말하면 배열에(배열 요소가 아닌 배열 이름에) 어떤 값을 대입하는것도 안되지만, 배열을 선언과 동시에 대입하는것은 가능합니다.

이 문장을
char *korea="japan";
char *japan="korea";
또는
char korea[]="japan";
char japan[]="korea";
또는
char korea[10]="japan";
char japan[10]="korea";
이와 같이 하셔야 옳은 문장입니다.

이 부분에 대해서 이해가 잘 안가시면 배열, 포인터, 문자열에 대해서 좀더 공부하셔야 할것 같네요..


질문을 정확히 이해하는데 애를 먹긴 했지만 대충 읽어보니 변수 k가 가리키는 문자열 "korea"로 korea변수를 구분해서 그 변수가 가리키는 문자열 "japan"을 얻어낼수 없냐? 인것 같습니다.
엄밀히 말하면 불가능합니다. 변수명이나 함수명과 같은 식별자는 컴파일되고 나면 모두 주소값으로 바뀌기 때문에 문자열로 변수명을 구분해내는것은 불가능 합니다.
모든 변수명이 아니라 특정 몇개의 변수명에 대해서 구분한다면 if구문을 쓰는 방법이 있을것 같네요..
다음처럼..

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char k[10]="korea";
    char j[10];
    char korea[10]="japan";
    char japan[10]="korea";

    if(strcmp(k, "korea") == 0)
    {
        strcpy(j, korea);
    }
    else if(strcmp(k, "japan") == 0)
    {
        strcpy(j, japan);
    }

    printf("j가 가리키는 문자열 : %s\n", j);
   
    return 0;
}

여기서 strcmp()는 문자열 비교 함수이고 strcpy()는 문자열 대입 함수입니다.
그리고 이 두 함수는 string.h를 인클루드 하셔야 사용할수 있습니다.

'==' 연산자나 '=' 연산자를 쓰지 않고 이런 함수를 쓰는 이유는 문자열 변수 (정확히 말해서 문자형 포인터나 문자형 배열)은 문자열 자체가 아니라 문자열의 위치를 가르키는 주소이기 때문입니다.
만약 두 함수를 '==' 와 '=' 연산자로 처리 한다면

if(strcmp(k, "korea") == 0)
strcpy(j, korea);

이 두 문장은
각가 다음과 같이 바꿔야겠죠..

if(k[0]=='k' && k[1]=='o' && k[2]=='r' && k[3]=='e' && k[4]=='a' && k[5]=='\0')

j[0] = korea[0]; j[1] = korea[1]; j[2] = korea[2]; j[3] = korea[3]; j[4] = korea[4]; j[5] = korea[5];

이런 처리를 일반적인 모든 문자열에서 "간편하게" 사용할수 있도록 함수화 한것이 strcmp()함수와 strcpy() 함수라고 생각하시면 됩니다.

+ -

관련 글 리스트
5203 변수에 값을 변수로 사용하여는 방법 좀 알려 주세요 김선태 1464 2005/08/06
5210     Re:변수에 값을 변수로 사용하여는 방법 좀 알려 주세요 심성현 1764 2005/08/07
5227         Re:Re:변수에 값을 변수로 사용하여는 방법 좀 알려 주세요 행인 1580 2005/08/16
5206     Re:변수에 값을 변수로 사용하여는 방법 좀 알려 주세요 행인 1559 2005/08/07
5208         Re:Re:행인님 도움 부탁합니다. 김선태 1517 2005/08/07
5212             Re:Re:Re:행인님 도움 부탁합니다. 행인 1525 2005/08/07
5215                 Re:Re:Re:Re:행인 님과 심성현님의 답변 감사합니다. 김선태 1445 2005/08/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.