[완료]C로 문자열 swap 함수를 만드는 도중 의문이 들었습니다.

leehipo의 이미지

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이 되는건가요?

도움부탁드립니다~

Hezekiah의 이미지

이건... 데이터의 변경이 안되지 않나요;;

char *tmp = "ddd";

이런 경우 tmp의 내용을 읽어올 수는 있지만... 문자열 상수라서... 내용 변경이 안되는 것으로 알고 있습니다. 그러한 문제가 아닐까요;ㅋ 런타임 에러가 발생할 때 무슨 에러가 나오는지 확인해보시면 알 수 있을 듯 한데요;;

* Everything is not accomplished *

leehipo의 이미지

잊고있었네요! 감사합니다.

emptynote의 이미지

저두 막 다시 C & C++ 공부를 시작할려니 질문하신 답을 몰라서 찾아 보았습니다.

같이 공부하는 처지에 도움이 되었으면 하네요.

참고 url : http://www.winapi.co.kr/ApiBoard/content.php?table=tblqa&pk=43758

======== 부분 인용 ======
...................
...................
문자열 상수는 코드영역에 기억됩니다.
일반적으로 만들어진 실행파일이 메모리에 로드될 때, 코드 영역은 읽기 전용 속성을
가지기 때문에 문자열 상수를 변경하려고 하면 Access violation이 발생하는 것이고
.............
.............

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.