이게 안되면 하나하나 자릿수 구해서 정수형, 실수형 등 다 노가다로 해야 되는데... 난감하네
===================================================
....맑은 정신, 건강한 육체, 넓은 가슴으로 세상과 타협하자.
===================================================
test2 데이타값을 test1구조체로 옮기려면 노가다 작업을 해야 될꺼 같은데요.
(atoi(), strlen())
다른 방법은 없을까요?
===================================================
....맑은 정신, 건강한 육체, 넓은 가슴으로 세상과 타협하자.
===================================================
C에서 포인터끼리 형
C에서 포인터끼리 형 변환하는 건 다 될 겁니다.
printf("a = %d\n",
printf("a = %d\n", test1->a);
하니까 쓰레기값이 나오네요.
이게 안되면 하나하나 자릿수 구해서 정수형, 실수형 등 다 노가다로 해야 되는데... 난감하네
===================================================
....맑은 정신, 건강한 육체, 넓은 가슴으로 세상과 타협하자.
===================================================
/* ....맑은 정신, 건강한 육체, 넓은 가슴으로 세상과 타협하자. */
예, 형 변환은 되지만
예, 형 변환은 되지만 그냥 같은 메모리 주소를 참조하고 있을 뿐이므로
논리적인 뜻은 보존되지 않습니다.
test2 데이타값을
test2 데이타값을 test1구조체로 옮기려면 노가다 작업을 해야 될꺼 같은데요.
(atoi(), strlen())
다른 방법은 없을까요?
===================================================
....맑은 정신, 건강한 육체, 넓은 가슴으로 세상과 타협하자.
===================================================
/* ....맑은 정신, 건강한 육체, 넓은 가슴으로 세상과 타협하자. */
없습니다.
(냉무)
쓰레기값이 나오는
쓰레기값이 나오는 것이 아닙니다. '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가 변경되는 것은 아닙니다.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
1. 구조체 A typedef
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 구조체 멤버변수들에서 사용할수 있게 하는게 질문입니다.
===================================================
....맑은 정신, 건강한 육체, 넓은 가슴으로 세상과 타협하자.
===================================================
/* ....맑은 정신, 건강한 육체, 넓은 가슴으로 세상과 타협하자. */
ㅎㅎ 그랬군요.
ㅎㅎ 그랬군요. 구조체는 단순히 여러 type을 만들어주는 기능을 하는 것이지, 자동으로 뭔가 해주는 기능은 없습니다. 또한 pointer도 memory address를 저장하는 변수이지 이게 무언가를 해주는 것은 없습니다.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
형변환은 되지만
+/- 기호라든지 구조체 원소 사이의 공간이라든지 그런 내용은 원했던대로 되지는 않을 것 같네요
데이터는 보존되지
데이터는 보존되지 않나요?,
소켓 프로그래밍 시에 sockaddr, sockaddr_in 구조체간의 변환 처럼요.
(sa_data -> sin_port, sin_addr, sin_zero)
형 변환 시 타입에 맞게 데이터가 들어가도록 하려면,
형 변환 이후 자료형에 해당하는 char 변수의 오프셋에 아스키 값을 직접 넣어주셔야 하지 않을까 싶습니다.
=============
박찬암 (hkpco)
http://hkpco.kr/
=============
박찬암 (hkpco)
http://hkpco.kr/
댓글 달기