김선태 님이 쓰신 글 :
: 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() 함수라고 생각하시면 됩니다.
|