C언어 파일 입출력 (2) 이번에는 r+ w+ a+ 에 대해서 알아보자. 1234567891011121314151617// 파일에는 "aossuper8.tistory.com" 이라는 문자열이 들어가있다.#include int main(){ FILE *fp; char data[100]; fopen_s(&fp, "C:\\Users\\aossu\\Desktop\\test.txt", "r+"); fgets(data, 100, fp); printf("현재 파일에 있는 내용 : %s\n", data); fseek(fp, 5, SEEK_SET); fputs("Hello World!!", fp); return 0;}Colored by Color Scriptercs 정상적으로 출력 되는것을 볼수가 있고 메모..
C언어 파일 입출력 이번에는 파일 입출력에 대해서 배워보겠다. 파일 입출력이란? 메모장이나 바이너리 파일에 글을 넣거나 글을 불러오거나 이런 것을 뜻한다. 나는 이것을 배울 때 너무 놀라웠다. 너무 신기했고 너무 재미있다. 일단 파일 입출력에 대해서 배우기 전에 스트림에 대해서 배워보자. 스트림이란? 프로그램과 어떤 것과의 사이에 입출력을 위해서 연결된 통로. C언어에서 사용하는 표준 스트림은 크게 3가지가 있다. stdin : 프로그램으로 들어가는 데이터 입력 스트림 ( 키보드 ) stdout : 프로그램이 출력 데이터를 기록하는 스트림 ( 모니터 ) stderr : 오류나 진단을 하기위한 스트림 ( 모니터 ) stderr은 여기서 사용하지 않겠음. 일단 이렇게만 알아두고 나중에 스트림을 사용해서 출력..
memcpy, memmove, memcmp 메모리 관련 함수 이번에는 메모리 관련 함수에 대해서 알아보겠다.메모리 관련 함수에는 memcpy, memmove, memcmp가 있다.이 함수들을 사용하려면 string.h 파일을 include 해야 된다. 12345678910111213141516#include #include int main(){ char str1[50] = "aossuper8.tistory.com"; char str2[50]; char str3[50]; memcpy(str2, str1, strlen(str1) + 1); memcpy(str3, "aossuper8", 10); puts(str1); puts(str2); puts(str3); return 0;}Colored by Color S..
C언어 구조체 노드 삽입 이번에는 자료구조의 기본적인 노드와 삽입에 대해서 알아보겠다. 노드는 일단 이렇게 생겼다. 데이터 다음 노드를 가리키는 포인터 이렇게 생겼다. 이거를 C언어로 표현을 하면 12345struct Node{ int data; struct Node *nextNode;}cs 이렇게 생겼다.이런 노드는 배열 중간에 값을 추가하거나 삭제를 할 때 유용하게 사용할 수 있다.배열은 중간에 값을 추가하거나 삭제를 하면 배열을 또 하나 만들어줘야 한다.그렇기 때문에 우리는 이 Node로 해결해줄 것이다.그림 상으로 보면 이렇다. 이 밑에 있는 노드를 추가시키려고 한다. 각 노드 오른쪽 공간에는 다음 노드를 가리키는 포인터가 있다. 이렇게 추가를 시키면 된다. 두 번째 노드에서 주소를 가리키는 포인..
malloc, calloc, realloc 동적 메모리 할당 이번에는 동적 메모리 할당에 대해서 알 알보자. 동정 메모리 할당 함수에는 malloc(), calloc(), realloc() 함수가 있다 이 함수를 사용하기 위해서는 stdlib.h 파일을 include 해줘야 한다. 일단 malloc() 함수에 대해서 알아보자. void* malloc(size_t size) 함수의 원형이다. 반환형은 void*(void 포인트형)이다. 결국은 우리가 원하는 자료형으로 할 수 있다. malloc 함수는 할당된 주소를 반환한다. 그리고 malloc으로 선언된 메모리는 힙(heap) 메모리에 저장이 된다. malloc 사용법은 = (자료형*) malloc(사이즈); 이렇게 해주면 된다. 사이즈는 바이트 단위로 ..
C언어 가변인자 가변 인자란? - 인수의 개수와 타입이 미리 정해져 있지 않다는 뜻 - 대표적인 함수 : printf - printf 함수는 전달되는 인수의 개수와 타입이 모두 다르지만 정상적으로 컴파일 되고 실행된다. ● printf 함수 원형 - int printf(const char *format, ...); format이라는 이름의 문자열 상수인데 흔히 서직 문자열이라고 부른다. ... 생각 하기로는 컴파일러에게 이후의 인수에 대해서는 개수와 타입을 점검하지 않도록 하는데 이 기호에 의해 가변 인수가 가능해진다. 가변 인수 함수의 개략적인 구조는 다음과 같다. 12345678910void varFunc( int fix, ... ){ va_list ap; va_start( ap, fix ); whi..
fread fwrite 바이너리 파일 입출력 함수 이번에는 fread fwrite 함수에 대해서 알아보겠다.fread fwrite 함수는 바이너리 파일 입출력 함수이다. 이 함수가 포함되어 있는 헤더 파일은 stdio.h 파일이다.일단 코드를 보기 전에 함수의 원형을 보자. 1234size_t fread(void *buffer, size_t size, size_t count, FILE *stream);//저장할 데이터의 시작 주소, 저장할 크기, 저장할 횟수, 파일 포인터size_t fwrite(const void* buffer, size_t size, size_t count, FILE *stream);//저장할 데이터의 시작 주소, 저장할 크기, 저장할 횟수, 파일 포인터Colored by Color ..
strlwr strupr 대소문자 변환 이번에는 strlwr strupr 대소문자 변환에 대해서 알아보겠다. 일단 strlwr strupr 함수를 사용하려면 string.h 파일을 include 해야 된다. 두 개의 함수를 같이 알아보자. 123456789101112131415#include #include int main(){ char arr[100]; printf("문자열 입력 : "); gets_s(arr, sizeof(arr)); strlwr(arr); puts(arr); strupr(arr); puts(arr); return 0;}cs 이렇게 소스코드가 있다. 근데 컴파일을 해보면 이러한 오류가 난다. ??왓더?? _strlwr 뭐 이런식으로 사용 하라는거 같다. 12345678910111213..
strchr strstr 문자 위치 찾기 이번에는 문자, 문자열 위치 찾는 함수를 알아보자.strchr strstr 함수를 사용하기 위해서는 string.h 파일을 include 해야 된다.strchr strstr 함수는 메모리 주소를 반환을 해주고 문자, 문자열을 찾아주는 함수이다.사용법을 한번 보자. 12345678910111213141516#include #include main(){ char array1[50] = "Good-morning, Good-afternoon, Good-evening"; char array2[10] = "morning"; char *p1 = NULL, *p2 = NULL; p1 = strchr(array1, 'a'); p2 = strstr(array1, array2); p..
strcat strncat 문자열 합치기 이번에는 문자열 합치기에 대해서 알아보겠다. strcat strncat 함수가 있는데 이 함수를 사용하기 위해서는 string.h 헤더 파일을 include 해줘야 한다. 사용법은 이러하다. 123456789#include #include main(){ char array1[10] = "Good"; char array2[10] = "Look"; strcat_s(array1, sizeof(array1), array2); puts(array1);}Colored by Color Scriptercs GoodLock 먼저 함수를 사용하기 위해 string.h 파일을 include 해주고 각 배열에 데이트를 넣어줬다. 그리고 strcat(받을 문자열, 대상 문자열..
strlen 문자열 길이 이번에는 strlen 문자열 길이 알아내는 법을 알아보겠다.strlen 함수를 쓰기 위해서는 string.h 파일을 include 해야 된다.이 함수 사용법을 알아보자. 1234567891011#include #include int main(){ char array1[] = "Hello C"; char array2[] = "안녕하세요"; printf("영문 문자열의 길이 : %d \n", strlen(array1)); printf("한글 문자열의 길이 : %d \n", strlen(array2)); return 0;}Colored by Color Scriptercs 영문 문자열의 길이 : 7한글 문자열의 길이 : 10 string.h 헤더 파일을 include 해주고..
파일 분할 컴파일 이번에는 헤더파일과 소스파일 여러개를 가지고 파일 분할 컴파일을 해보겠다.human.c | str.c | Study.c | Human.h | str.h 파일을 준비하자. 일단 헤더파일 안에는 전역 변수 구조체, 공용체, 열거형 함수의 원형 일부 특정한 함수 (인라인 함수) 매크로 이렇게 넣는것을 추천한다. C코드를 집어넣도 되긴 하는데 별로 권장하고 싶지는 않다. 12345678910enum {MALE, FEMALE};struct Human{ char name[20]; int age; int gender;}; struct Human Create_Human(char *name, int age, int gender);int Print_Human(struct Human *human);cs h..