Programming/C
-
C언어 입출력 이외의 문자열 관련 함수Programming/C 2016. 5. 2. 22:52
입출력 이외의 문자열 관련 함수 헤더파일 string.h에 선언된 문자열 관련 함수들 문자열의 길이를 반환하는 함수: strlen #include size_t strlen(const char * s); → 전달된 문자열의 길이를 반환하되, 널 문자는 길이에 포함하지 않는다. typedef unsigned int size_t; unsigned int의 선언을 size_t로 대신할 수 있다. 라는 뜻. 나중에 typedef를 공부한 후 다시 봐야겠다. 그래서 다음 두 선언은 동일하다. size_t len; unsigned int len; #include #include void RemoveBSN(char str[]) { int len = strlen(str); str[len-1] = 0; } int main..
-
C언어 표준 입출력과 버퍼Programming/C 2016. 5. 2. 22:46
표준 입출력과 버퍼 표준 입출력 기반의 버퍼 표준 입출력 함수를 통해 데이터를 입출력하면 해당 데이터들은 운영체제가 제공하는 '메모리 버퍼'를 중간에 통과하게 된다. 이 이미지 처럼... '메모리 버퍼'는 데이터를 임시로 모아두는(저장하는) 메모리 공간이다. 키보드를 통해 입력되는 데이터는 일단 입력버퍼에 저장된 후(버퍼링 된 다음에) 프로그램에서 읽혀진다. 키보드로부터 입력된 데이터가 입력 스트림을 거쳐 입력버퍼로 들어가는 시점은 엔터 키가 눌리는 시점이다. 그래서 아무리 문자열을 입력해도 엔터 키가 눌리기 전에는 fgets함수가 문자열을 읽어 들이지 못한다. 버퍼링을 하는 이유 '데이터 전송의 효율성'과 관련이 있음. 버퍼링 없이 키보드가 눌릴 때마다 눌린 문자의 정보를 목적지로 바로 이동시키는 것보..
-
C언어 문자열 단위 입출력 함수Programming/C 2016. 5. 2. 21:28
문자와 문자열 관련 함수 문자열 단위 입출력 함수 문자열 입력 함수는 scanf함수와는 다르게 공백을 포함하는 문자열도 입력받을 수 있다. 문자열 출력 함수: puts, puts 모니터로 하나의 문자열을 출력할 때 일반적으로 사용하는 두 함수는 다음과 같다. #include int puts(const char * s); int fputs(const char * s, FILE * stream); → 성공 시 음수가 아닌 값을, 실패 시 EOF 반환 puts 함수는 출력의 대상이 stdout으로 결정되어 있지만 fputs 함수는 두 번째 인자를 통해 출력의 대상을 결정할 수 있다. #include int main(void) { char * str = "Simple String"; printf("1. puts..
-
C언어 스트림과 문자 단위 입출력 함수Programming/C 2016. 5. 2. 21:10
문자와 문자열 관련 함수 스트림과 데이터의 이동 데이터의 입력과 출력은 프로그램의 흐름. 프로그램 안으로 데이터가 흘러 들어오는 것이 입력, 프로그램 밖으로 데이터가 흘러 나가는 것이 출력.printf함수와 scanf함수로 데이터를 입출력할 수 있는 이유는 스트림(stream)이라는 다리 역할이 있기 때문이다. 스트림은 운영체제에서 제공하는 소프트웨어적인(소프트웨어로 구현되어 있는) 가상의 다리이다. 운영체제는 외부장치와 프로그램과의 데이터 송수신의 도구가 되는 스트림을 제공하고 있다. 스트림의 생성과 소멸 콘솔(일반적으로 키보드와 모니터) 입출력을 위한 '입력 스트림'과 '출력 스트림'은 프로그램이 실행되면 자동으로 생성되고, 프로그램이 종료되면 자동으로 소멸되는 스트림이다. 이 둘은 기본적으로 제공되..
-
도전 프로그래밍3Programming/C 2016. 5. 2. 21:07
도전 프로그래밍3 3는 어렵다고 해서 기록을 남겨본다. 도전 1 배열 90도 씩 회전하기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 13 9 5 1 14 10 6 2 15 11 7 3 16 12 8 4 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 4 8 12 16 3 7 11 15 2 6 10 14 1 5 9 13 #include int RotateArray(int (*array)[4], int column); int ShowArray(int (*array)[4], int column); int main(void) { int arr[4][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, ..
-
C언어 함수 포인터와 void 포인터Programming/C 2016. 5. 2. 21:00
함수 포인터와 void 포인터 변수뿐만 아니라 함수도 바이너리 형태로 메모리 공간에 저장되어 호출 시 실행이 된다. 메모리상에 저장된 함수의 주소 값을 저장하는 포인터 변수가 바로 '함수 포인터 변수'이다. 함수 포인터와 void 포인터 함수 포인터 배열의 이름이 배열의 시작주소 값을 의미하듯, 함수의 이름도 함수가 저장된 메모리 공간의 주소 값을 의미한다. 배열의 이름과 마찬가지로 함수의 이름도 그 형태가 상수이고, 함수의 주소 값 저장을 위한 포인터 변수를 별도로 선언하는 것도 가능하다. 이러한 용도로 선언된 포인터 변수를 가리켜 '함수 포인터 변수'라 한다. int SoSimple(int num1, int num2); { .... } 위 함수는 반환형이 int형이고 매개변수로 int형 변수가 두 개..
-
C언어 다차원 배열과 포인터의 관계Programming/C 2016. 5. 2. 20:55
다차원 배열과 포인터의 관계 2차원 배열이름의 포인터 형 #include int main(void) { int arr2d[3][3]; printf("%d \n", arr2d); printf("%d \n", arr2d[0]); printf("%d \n\n", &arr2d[0][0]); printf("%d \n", arr2d[1]); printf("%d \n\n", &arr2d[1][0]); printf("%d \n", arr2d[2]); printf("%d \n", &arr2d[2][0]); printf("sizeof(arr2d): %d \n", sizeof(arr2d)); printf("sizeof(arr2d[0]): %d \n", sizeof(arr2d[0])); printf("sizeof(arr2d[..
-
C언어 포인터의 포인터Programming/C 2016. 5. 2. 20:50
포인터의 포인터 포인터의 포인터는 포인터 변수를 가리키는 또 다른 포잉ㄴ터 변수를 뜻하는 것. 흔히 '이중 포인터' 또는 '더블 포인터'라 부르며, 포인터 변수 선언은 다음과 같이 * 연산자를 두 개 이어서 선언한다. int ** dptr; // int형 이중 포인터 #include int main(void) { double num = 3.14; double *ptr = # double **dptr = &ptr; double *ptr2; printf("%9p %9p \n", ptr, *dptr); printf("%9g %9g \n", num, **dptr); ptr2 = *dptr; *ptr2 = 10.99; printf("%9g %9g \n", num, **dptr); return 0; } 포인..