1. 다음 코드는 어떻게 출력될까요??
int main(){ fprintf(stderr, "Hello "); fprintf(stdout, "It's a small "); fprintf(stderr, "World\n"); fprintf(stdout, "place\n"); return 0; }
2. 다음 두 선언은 어떻게 다를까요? 각각의 sizeof는 얼마를 반환할까요?
char str1[] = "bhuvan"; char *str2 = "another one";
3. C에서 string이란 무엇일까요?
4.간단한 my_strcmp, my_strcat, my_strcpy, my_strdup를 짜보세요.
(Bonus : 각각의 함수에서 문자열을 한 번만 읽도록 만들어보세요.)
5.다음은 무엇을 return할까요?
int *ptr; sizeof(ptr); sizeof(*ptr);
6. malloc이란 무엇일까요? calloc과의 차이점은 무엇인가요? 일단 메모리가 malloc되면 realloc은 어떻게 사용할까요?
7. & operator와 *operator는 무엇인가요?
8. 아래와 같은 변수들이 주어진 주소에 존재한다고 가정하면, 다음 포인터 연산이 가리키는 주소는 어디일까요?
char** ptr = malloc(10); //0x100
ptr[0] = malloc(20); //0x200
ptr[1] = malloc(20); //0x300
* `ptr + 2`
* `ptr + 4`
* `ptr[0] + 4`
* `ptr[1] + 2000`
* `*((int)(ptr + 1)) + 3`
9. double free error은 어떻게 방지할 수 있을까요?
10. int형, char형을 출력하는 출력서식자는 무엇일까요?
11. 다음 코드는 valid합니까? 그렇다면, output은 어디에 있습니까?
char *foo(int var){ static char output[20]; snprintf(output, 20, "%d", var); return output; }
12. 문자열을 읽어 파일을 열고 40자는 원래 순서로, 다음 40자는 뒤집어서 출력하는 함수를 만들어 보십시오. (POSIX API를 사용해보십시오)
13. PISIX file descriptor와 C의 FILE*의 차이점은 무엇입니까?(어떤 함수 호출을 사용하는지, 어느 것이 buffer되는지) POSIX는 내부적으로 C의 FILE을 사용합니까 아니면 반대입니까??
5.
int형 포인터 - 8바이트
ptr은 int형 포인터이므로 8바이트
*ptr은 int형 포인터가 가리키는 값이므로 int, 즉 4바이트
6.
malloc은 heap의 메모리 공간을 사용하기 위해 내가 필요한 만큼 필요한 자료형으로 메모리를 예약할수 있습니다. calloc은 이렇게 할당받은 메모리를 0으로 초기화해줍니다. realloc을 사용하면 크기를 새로 할당할 수 있는데, 이 때 새로운 크기의 메모리를 다시 heap에서 할당받아 기존 메모리에서 복사해온 다음, 기존 메모리를 free시켜 줍니다.
7.
&연산자를 통해 그 변수의 주소값을 얻어올 수 있습니다. *연산자를 통해 그 변수가 가리키고 있는 주소의 값을 참조해올 수 있습니다.
int a = 4;
&a = a의 메모리상의 주소값
*&a = a의 메모리상의 주소값이 가리키고 있는 값을 참조해옴. 즉, 4.
8.
0x102
0x104
0x014
0x8E4
0x113
9. 코드를 잘 짜야합니다... free된 포인터를 다시 free하면 에러가 발생합니다.
10. %d, %c
11.valid합니다.
output이 static 변수이므로, data segment에 존재합니다.
12.
13. 잘 모르겠습니당...
C의 FILE에서 사용하는 라이브러리 함수인 fopen, fread, fwrite, fclose는 대부분 POSIX API인 open/read/write/close등을 사용합니다.
대신 C FILE에서는 버퍼를 사용해 system call의 context switching overhead를 줄이려고 하고 있습니다.
즉, 호출할 때마다 바로 read/write를 하지 않고 내부 버퍼에 저장해두었다가 적절한 시점에 system call을 호출합니다.(printf와 비슷??)
'Angrave System Programming > Learning C' 카테고리의 다른 글
Debugging(4) (0) | 2019.01.09 |
---|---|
Debugging(3) (0) | 2019.01.09 |
Debugging(2) (0) | 2019.01.09 |
Debugging(1) (0) | 2019.01.09 |
Strings and Structs(2) (0) | 2019.01.09 |