포인터 질문입니다..급질문입니다.
글쓴이: xeon007 / 작성시간: 수, 2004/07/14 - 6:45오후
typedef struct {
char test[40];
} IE_TYPE;
main()
{
char token[40];
testfuntion(token);
...
event = (IE_TYPE *)token;
printf(event %s\n",event->test);
}
int testfuntion(char *token)
{
event = (IE_TYPE *)token;
strcpy(event->test,"test");
}
이 코드가 제대로 동작하나요?
Forums:
별 문제 없어 보이네요.
별 문제 없어 보이네요.
from saibi
기왕이면[code:1]char token[sizeof&
기왕이면
이 더 좋아보입니다. 구조체에는 padding bit(빈 공간)가 붙을 수 있기 때문에 맴버 변수들의 크기의 합보다 더 큰 크기를 가질 수 있습니다. 만약 이런 상황에서 대입이 일어난다면 좋지 않은 일이 일어날 수 있습니다.
감사합니다.^^token 배열을 ie_type보다 크게 잡으면 문제
감사합니다.^^
token 배열을 ie_type보다 크게 잡으면 문제 없다는 말씀이죠?
^^
^^
캐스팅도 필요없고 가독성도 좋은 방법이 있는데굳이 이런 식으로 하신
캐스팅도 필요없고 가독성도 좋은 방법이 있는데
굳이 이런 식으로 하신 이유가 궁금합니다.
그이유는 처음 token배열이 testfuntion으로 들어갈때는 다른
그이유는 처음 token배열이 testfuntion으로 들어갈때는 다른 값을 가지고 들어가서 처리된후에 token배열을 초기화하고 다른 스트럭쳐 구조를 생성하여 다른값을 전달하기 위해서입니다.^^
다른 방법이 있다면 ^^알려주세요..
^^
Re: 포인터 질문입니다..급질문입니다.
컴파일러의 따듯한 배려로 실제에서는 문제 없이 동작할 가능성이 훨씬 더
큽니다만, 엄격하게 따지면 최근에 이곳에서 종종 언급되었던 정렬 제한과
관련된 문제가 있습니다 - 구조체 자체가 보다 엄격한 정렬 제한을 가질 수
있기 때문에 특정 type 이 구조체 멤버로 있을 때와 구조체 멤버가 아닐
때의 정렬 제한이 달라질 수 있습니다. 따라서, 표준 수준의 이식성을
추구하신다면 지양하시는 것이 좋습니다.
보여 주신 예와 나중에 언급하신 설명만으로는 구체적인 문제 상황을
이해하기 힘들어 다른 방법을 제안해 드리기는 어려울 것 같습니다.
그럼...
--
Jun, Woong (woong at gmail.com)
http://www.woong.org
댓글 달기