[완료]C로 문자열 swap 함수를 만드는 도중 의문이 들었습니다.
글쓴이: leehipo / 작성시간: 수, 2011/01/12 - 8:19오후
C로 두 문자열을 swap하는 함수를 만들고 있었는데, 불현듯 의문이 생겨 질문드립니다.
처음에 제가 작성한 코드는 아래와 같습니다.
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 128 void main() { char* data[] = {"Mon", "Tue"}; char tmp[MAX]; strcpy(tmp, data[0]); strcpy(data[0], data[1]); strcpy(data[1], tmp); printf("%s\n", data[0]); printf("%s\n", data[1]); }
data[]라는 문자열배열을 정의하고, 두 문자열을 strcpy를 통해 swap 합니다.
전혀 문제가 없어보이는데 막상 실행하면 프로그램이 죽어버립니다.
혹시나해서 아래와 같이 구현해봤는데...
아래와 같은 경우는 잘 동작하더군요.
void main() { char data1[MAX] = "Mon"; char data2[MAX] = "Tue"; char tmp[MAX]; strcpy(tmp, data1); strcpy(data1, data2); strcpy(data2, tmp); printf("%s\n", data1); printf("%s\n", data2); }
왜 문자열배열(char* data[])를 이용해 swap 하는 것은 안되고.
독립적인 두 문자열(data1, data2)은 swap이 되는건가요?
도움부탁드립니다~
Forums:
char *data[]
이건... 데이터의 변경이 안되지 않나요;;
char *tmp = "ddd";
이런 경우 tmp의 내용을 읽어올 수는 있지만... 문자열 상수라서... 내용 변경이 안되는 것으로 알고 있습니다. 그러한 문제가 아닐까요;ㅋ 런타임 에러가 발생할 때 무슨 에러가 나오는지 확인해보시면 알 수 있을 듯 한데요;;
* Everything is not accomplished *
아하
잊고있었네요! 감사합니다.
참고 url 알려드립니다.
저두 막 다시 C & C++ 공부를 시작할려니 질문하신 답을 몰라서 찾아 보았습니다.
같이 공부하는 처지에 도움이 되었으면 하네요.
참고 url : http://www.winapi.co.kr/ApiBoard/content.php?table=tblqa&pk=43758
======== 부분 인용 ======
...................
...................
문자열 상수는 코드영역에 기억됩니다.
일반적으로 만들어진 실행파일이 메모리에 로드될 때, 코드 영역은 읽기 전용 속성을
가지기 때문에 문자열 상수를 변경하려고 하면 Access violation이 발생하는 것이고
.............
.............
댓글 달기