본문 바로가기

공부(IT)

[c] getchar(),getch(),getche()의 차이점을 알아보자(원문 링크) 원문 주소 : http://kcoder.tistory.com/entry/getchar-getch-getche%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%98%88%EC%A0%9C%EC%86%8C%EC%8A%A4-%EA%B7%B8%EB%A6%BC ------------------------ 굉장히 좋은글이어서 저장용으로 원문 주소를 끌어왔다. 더보기
[c] 버퍼문제 1 출처 : http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=214854487&sp=2&sid=oTchTn5jxw%2BfacTCZPhItA%3D%3D&rank=1&pid=Sr3DVsoRR1lssvCCkTVsssssssd-268661&search_sort=0&qb=Y+yWuOyWtCDrsoTtjbzsnZgg7YGs6riw&spq=0&section=kin&enc=utf8 --------------------------------------------------------------------------------------- 질문 : #include int main() { int ch=0; int count=0; while(ch != EOF) { .. 더보기
[c] sizeof연산자를 근본적으로 알아보자(원문 링크) 원문 링크 : http://cafe.naver.com/haebop/5173 ------------------------------------- sizeof연산자가 어떤식으로 작동하는지 더 깊게 알수 있게해주는 좋은 글이어서 끌어와보았다. 더보기
[c]2차배열을 함수에서 리턴받기 1.소스코드 --------------------------------------------------- #include int(* initArray())[4] { static int arr[4][4] = { 0 }; for (int i = 0; i < 16; i++) *(arr[0] + i) = i + 1; return arr; } int main() { //int** arr = initArray(); int(* arr)[4] = initArray(); for (int i = 0; i < 4; i++) for (int j = 0; j < 4; j++) printf("%d", arr[i][j]); return 0; } ------------------------------------------------.. 더보기
[c]for문 한개로 이차배열 초기화하기 1. 소스코드------------------------------------#include int main() { int arr[4][4] = { 0 };for (int i = 0; i < 16; i++)*(arr[0] + i) = i + 1; for (int i = 0; i < 4; i++)for (int j = 0; j < 4; j++)printf("%d", arr[i][j]); return 0;} --------------------------------------- 2.output----------------------------------- -------------------------------- 3. 결론 딱히없다. 그냥 1에서 16까지 차례대로 초기화시킬일이있었는데 되나 싶어서 심심해서 .. 더보기
[c] 메모리 침범하기 1. 개요 원래 목적은 아무메모리나 참조해서 그 메모리의 주소값을 각 자리마다 계속 더하여 한자리수로만들후 이 값의 분포가 얼마나 랜덤한지에 대해 알아보려는 것이었다.하지만 쓰레기값을 참조하려다가 그냥 선언되있지 않은 메모리영역을 주소값 1씩 늘려 막 참조하는방식으로 해보았는데 결과가 흥미로웠다.당연히 참조할수없는곳을 건드려서 금방 다운되는경우가 대부분이었지만 가끔씩 아무리 참조해도 에러나지않는경우도 있었다.그냥 안쓰는 영역이 많았나보다 했지만 만단위 넘게 참조해도 멀쩡했다. 2.소스코드---------------------------------------------------------------------------------------------------------------------------.. 더보기
[c]sizeof(void)는 불가능 #include int main() {printf("%d", sizeof(void));return 0;} ----------------------------------------sizeof(void)는 불가능하다. 불완전한 형식은 사용할수없다고 컴파일 에러 발생한다. 더보기
[c] 한글 문자열 #include int main() { char arr[] = "한글 테스트"; int i = 0; for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) printf("arr[%d] : %c \n",i, arr[i]); printf("%c%c", arr[0],arr[1]); return 0; } -------------------------------------------------------------------- -------------------------------------------------------- 1. 한글문자열은 한글자당 배열 두칸을 잡아먹는다. 2. 각 칸마다 출력하면 알수없는글자가나온다 3. 두 칸을 이어서 출력하면 온전한 글자가 출력된다. .. 더보기
[c] 정수와 정수를 나눌때의 처리과정 int a =100 , b=100;a/8 * b/8; 이 연산의 결과는 144가 아닌 150이 나온다.정수끼리나눌때 형의 승격이 발생하는모양이다.하지만 (a/8) * (b/8)의 결과는 144 이다. 정수와 정수의 연산은 정수형으로 그대로 처리되는줄알았는데 뭔가 이해가 안된다. *바보였다.... 100/ 8 = 12.5 -> 12 12 *100 = 1200 1200 /8 = 150 그냥 순서대로 가고있는거였는데 착각했다.후의 100/8에서 0.5가 버려지지 않느냐 버려지느냐의 순서차이었다. 더보기
[c] 삼항연산자는 반드시 값을 반환해야한다 #include void test(){}int main(){ int a;scanf("%d",&a); printf("%d", a>0? test() : a);} ---------------------------------------------------#include int test(){ return 0;}int main(){ int a;scanf("%d",&a); printf("%d", a>0? test() : a);}-------------------------------------------------------- 1번 예제에서는 에러가발생하지만 2번에서는 정상 작동한다.에러 내용 : (error: invalid use of void expression) 삼항연산자는 반드시 값을 반환해야하므로 그 안에.. 더보기