어떻게 할당한다는건지 모르겠습당..
글쓴이: rokmn3309 / 작성시간: 토, 2003/03/08 - 10:49오전
ide_smart 소스를 분석도중에
__u8 args[4 + 512] = {WIN_SMART, 0, SMART_READ_THRESHOLDS, 1, };
__u8 args[4 + 512] = {WIN_SMART, 0, SMART_READ_VALUES, 1, };
이렇게 할당하는 부분이 존재하는데 어떻게 처리하는건지 궁금합니다.
<linux/hdreg.h> 헤더파일에 보면은..
WIN_SMART sub_commands에 대해서 선언하고 있는데
관련함수들을 설명한 문서라도 구할수 있을까요?..
리플 부탁드립니다.
Forums:
Re: 어떻게 할당한다는건지 모르겠습당..
args[4] 부터 args[515] 까지는 모두 1 로 채워집니다.
좀더 자세히좀...
sizeof를 해보면은 516인데.. strlen으로 찍어보면은 1로 나옵니다.
그럼 할당된 크기는 516인데 실제 데이터는 1밖에 없다는 이야기인데..
모두 1로 채워진다면 strlen이나 sizeof나 값이 같아야 하지 않을까요??
이런문법은 본적이 없어서리...
[/code]
strlen으로 보면 1이 찍히는 것은 배열에서 두번째 것이 0이기 때문
strlen으로 보면 1이 찍히는 것은 배열에서 두번째 것이 0이기 때문이지요.
__u8 args[4 + 512] = {WIN_SMART, 0, SMART_READ_THRESHOLDS, 1, };
__u8 args[4 + 512] = {WIN_SMART, 0, SMART_READ_VALUES, 1, };
에서
WIN_SMART, 0
으로 되어있으니
args[1]은 0이 들어가고요
1,}로 ,만 찍고 괄호를 닫는 것은 이 다음부터 끝까지 1로 채워라 라는 뜻입니다.
그러니 이것과 같은 의미가 되겠지요 (대신에 메모리 상에 할당되는 위치는 다를 겁니다)
rommance.net
값을 출력해보면은...
값을 할당받고 나서의 값을 출력을 해보면은..
1로 채워진다면 출력값이 1이 되어야 할텐데.. 0으로 찍히는데..
물론 앞에 4개는 WIN_SMART, 0, SMART_READ_THRESHOLDS, 1 이렇게
입력한 값대로 들어가지만 그 이후에 4번째부터 515번까지는 0으로 채워져 있다고 출력이 됩니다..
Re: 값을 출력해보면은...
인덱스 4부터 끝까지는 0이 채워지는 게 맞습니다. 제대로 테스트 된겁니다.
마지막 콤마는 있어도 되고 없어도 됩니다.
제가 그 소스는 보지 못해서 뭘 의미하는 지 구체적으로는 모르지만
아마도 커맨드 id 와 대응되는 숫자의 반복이고, 커맨드 id 가 0이되면
더 이상 커맨드가 존재하지 않음을 0으로 나타내는 식으로 코드가
만들어져 있는 것 같네요. 그러니까, WIN_SMART 나
SMART_READ_THRESHOLDS 같은 값은 적어도 0이 아니겠죠.
Orion Project : http://orionids.org
아 그렇군요. 0으로 채워지는 것이군요.지적해주셔서 감사합니다.
아 그렇군요. 0으로 채워지는 것이군요.
지적해주셔서 감사합니다.
1로 채워지려면 어떻게 되는 것인지 찾아보다가 포기했습니다. 몾찾겠네요
rommance.net
C initializer 문법으로 나머지 모두를 1로 채우는 방법은 없습
C initializer 문법으로 나머지 모두를 1로 채우는 방법은 없습니다.
for 를 이용하거나, 지금 같은 경우는 1바이트 단위니까, memset 을
써도 되겠네요.
Orion Project : http://orionids.org
댓글 달기