C언어 형변환

BSK의 이미지

1. 구조체 A

typedef struct
{
int a;
char b[20 + 1];
double;
} TEST;
TEST *test1;

2. char test2[255] = "12345678222222222333344444444433333";

test1 = (TEST *)test2;

test2 데이타들이 test1 structure 멤버변수롤 형번환이 자동적으로 이루어지는지 궁금합니다.

gamdora의 이미지

C에서 포인터끼리 형 변환하는 건 다 될 겁니다.

BSK의 이미지

printf("a = %d\n", test1->a);

하니까 쓰레기값이 나오네요.

이게 안되면 하나하나 자릿수 구해서 정수형, 실수형 등 다 노가다로 해야 되는데... 난감하네
===================================================
....맑은 정신, 건강한 육체, 넓은 가슴으로 세상과 타협하자.
===================================================

/* ....맑은 정신, 건강한 육체, 넓은 가슴으로 세상과 타협하자. */

gamdora의 이미지

예, 형 변환은 되지만 그냥 같은 메모리 주소를 참조하고 있을 뿐이므로

논리적인 뜻은 보존되지 않습니다.

BSK의 이미지

test2 데이타값을 test1구조체로 옮기려면 노가다 작업을 해야 될꺼 같은데요.
(atoi(), strlen())

다른 방법은 없을까요?
===================================================
....맑은 정신, 건강한 육체, 넓은 가슴으로 세상과 타협하자.
===================================================

/* ....맑은 정신, 건강한 육체, 넓은 가슴으로 세상과 타협하자. */

jick의 이미지

(냉무)

powerson의 이미지

쓰레기값이 나오는 것이 아닙니다. '1', '2', '3', '4'(4byte)가 int(4byte)형으로 계산되서 나온 결과입니다.
직접 확인해보고 싶으시면,

     int test;
 
     ((char *)&test)[0] = '1';
     ((char *)&test)[1] = '2';
     ((char *)&test)[2] = '3';
     ((char *)&test)[3] = '4';

이렇게 하셔서 test를 print해보시면 결과가 똑같으실 겁니다.
pointer 형변환을 한다고 해서 해당 pointer가 참조하고 있는 data가 변경되는 것은 아닙니다.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

BSK의 이미지

1. 구조체 A

typedef struct
{
int a;
char b[20 + 1];
double;
} TEST;
TEST *test1;

2. char test2[255] = "12345678222222222333344444444433333";

test1 = (TEST *)test2;

답글 감사합니다.
--------------------------------------------------------------
test1은 형변환된(TEST *) test2 데이타를 기리키고 있습니다.

제가 원한는건 test1구조체

첫번째 멤버변수에는 정수형 숫자가 채워져야합니다.
두번째 멤버변수(b[20+1])에는 test2 데이터 20자리가 채워져야 합니다.
세번째 멤버변수에는 실수형 숫자가 채워져야합니다.

위 모든 작업은 test2 데이타 값이 해당 형으로 변환되면서 이뤄져야합니다.

노가다로 strlen(), atoi(), atol() 이런 함수를 써서 할수도 있지만
포인터를 이용해서 하고 싶습니다.

답글에는 test2 데이타만 조작하고 있는걸로 이해가 되는데요.

**** test2 데이타를 가져다가 test1 구조체 멤버변수들에서 사용할수 있게 하는게 질문입니다.

===================================================
....맑은 정신, 건강한 육체, 넓은 가슴으로 세상과 타협하자.
===================================================

/* ....맑은 정신, 건강한 육체, 넓은 가슴으로 세상과 타협하자. */

powerson의 이미지


ㅎㅎ 그랬군요. 구조체는 단순히 여러 type을 만들어주는 기능을 하는 것이지, 자동으로 뭔가 해주는 기능은 없습니다. 또한 pointer도 memory address를 저장하는 변수이지 이게 무언가를 해주는 것은 없습니다.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

김일영의 이미지

+/- 기호라든지 구조체 원소 사이의 공간이라든지 그런 내용은 원했던대로 되지는 않을 것 같네요

hkpco의 이미지

데이터는 보존되지 않나요?,

소켓 프로그래밍 시에 sockaddr, sockaddr_in 구조체간의 변환 처럼요.
(sa_data -> sin_port, sin_addr, sin_zero)

형 변환 시 타입에 맞게 데이터가 들어가도록 하려면,
형 변환 이후 자료형에 해당하는 char 변수의 오프셋에 아스키 값을 직접 넣어주셔야 하지 않을까 싶습니다.

=============
박찬암 (hkpco)
http://hkpco.kr/

=============
박찬암 (hkpco)
http://hkpco.kr/

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.