네트워크 프로그래밍 시간에, htonl 이런 함수들을 배울 거에요. 리틀 엔디안 순서면, 빅 엔디안 순서로 바꿔버리는, 뭐 그러한 메소드입니다. 더 정확히 말하면, 이런 변환을 해야 합니다. uint32_t를 리틀 엔디안으로 표현한 것이 ABCD라고 해 봅시다. 이걸 빅 엔디안으로 바꾸면 DCBA입니다. 여러 방법이 있지만, c언어의 공용체를 이용해서 쉽게 처리하는 방법을 배워보도록 하겠습니다. 공용체의 멤버들은 같은 메모리 공간을 공유합니다. 구조체는, 멤버들이 같은 메모리 공간을 공유하지 않습니다. 그러면 아래와 같이 선언하면 어떻게 될까요? moo 변수인 t를 할당할 때 메모리에 어떻게 그려지는지 보겠습니다. 이렇게 될 겁니다. 중요한 것은 num과 char형 배열인 x는 메모리 공간을 공유한다는 ..
C언어 검색 결과
다음 코드를 봅시다. FOO(x)는 ((x)*(x))로 define이 된 매크로입니다. 그리고 6번째 줄에 FOO(p(0)); 이 있어요. 이것은 어떻게 대치가 될까요? 만약에 위와 같이 대치가 된다면, 어떻게 될까요? p가 2번 호출됩니다. 이것만 보면 이게 굳이 왜. 라는 생각이 드실 수도 있을 거에요. 자. 그러면 질문을 바꿔 봅시다. FOO(u = p(0))은 어떻게 대치가 될까요? 만약에, 이렇게 대치가 된다면 어떨까요? 봐도 모르겠으니, wandbox에서 돌려보겠습니다. operation on 'u' may be undefined. 라고 나옵니다. 음.. 뭔 이야기인지는 모르겠지만, u에 대한 연산이 정의되지 않는다. 정도로 해석을 하면 됩니다. 사이드 이펙트가 있다고 생각해도 무난합니다. 그..
file 입출력을 다루기 위해서는, 입출력 함수들에 대해서 알고 있어야 합니다. 오늘은 이 중에서 getchar에 대해서 알아보도록 하겠습니다. 이 함수는 getc(stdin)을 호출한 것과 동일한 역할을 한다고 링크에서 설명을 하고 있어요. getc와 fgetc에 대해서는, 추후에 다시 설명을 할 기회가 있을 듯 싶네요. stdin에서 어떻게 읽어오는지 대략적으로 그림을 그리실 필요가 있어요. 예를 들어, 이런 프로그램이 있다고 생각해 봅시다. 저는 age와 성별을 받았습니다. 그렇게 해서, 나이와 성별에 대한 정보를 출력하기를 기대하고 있어요. 그런데, 실제로는, age에는 23이 들어갔는데 gen에는 M이나 F가 저장되지 않았다는 것을 알 수 있어요. 예를 들어 2를 입력하고 엔터를 쳤다고 해 봅시..
fflush(stdin) 정도는 책을 보시면서 한 두번쯤은 보셨을 거에요. 가끔, 왜 이 함수를 썼는데 동작을 하지 않느냐. 는 질문도 더러 받아본 적이 있습니다. 원형은 다음과 같습니다. 하도 많이 언급이 되다 보니, 그냥 안 보고도 이 함수를 쓰시는 분들이 적지 않게 계실 듯 싶기도 합니다. 코드포스 interactive 문제를 많이 보셨다면, fflush 정도는 많이 써 보셨으리라 생각이 드니, 사용법은 생략해도 무난할 듯 싶습니다. 그런데, 링크에서 보면, 이런 문구가 있습니다. 인풋 스트림에 대해서는, 동작이 정의되지 않는다고 설명이 되어 있습니다. 이것 하나만으로 답변이 끝났네요. stdin은 표준 입출력을 의미합니다. 이것 또한 input과 관련된 것입니다. 따라서, 동작이 정의되지 않고, ..
fwrite, fread, fgets. 이 셋의 공통점은 무엇일까요? 링크의 설명에서 보면, 공통적으로 stream 이라는 것이 들어가 있어요. 아. 듣기만 해도 어려워 보입니다. 그리고 stream에 대해서, 공식 문서의 io library에 대한 링크를 보면, 아래와 같은 문구가 있다는 것을 알 수 있습니다. 쉽지 않아 보이는군요. 차근 차근 생각해 봅시다. 우리가 scanf 함수로, "abcde" 라는 것을 입력받았다고 해 봅시다. 그러면, 키보드로부터 받은 "abcde"를 프로그램 A에다가 넘겨줄 겁니다. 그러면 keyboard에서 A로 흘러갔다는 게 조금 와 닿나요? 반대로, "chogahui"를 FILE B에다가 쓴다고 해 봅시다. 그러면 어떻게 해야 하나요? "chogahui"가 A에서 fi..
최근댓글