C언어 54

[C언어] AIX 서버에서 char 타입 사용 시 반드시 주의할 점

C 개발을 하다 보면 char 타입의 변수로 return 값을 받을 일이 생긴다. 예를 들면 아래와 같은 코드다.#include char testFunction() { char ret; ... if(err > 0) { return -1; } return ret;}int main() { char a; a = testFunction(); if(a == -1) { printf("Error !!\n"); } return 0;} 겉보기에는 아무 문제없어 보이지만 AIX 서버에서 위의 코드를 실행하면 엄청난 문제가 발생한다. C는 기본으로 변수 타입을 선언하면 signed로 선언이 되며 이는 생략가능하다고 본능적(?)으로 알고 있을 것이다. 하지만 AIX 서버는 char 타입에 대해..

[C언어] strncmp 함수 (지정한 길이만큼 문자열 비교)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 지정한 길이만큼 문자열을 비교할 때 사용한다. 헤더 #include ※ 함수 사용 시 string.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 int strncmp(const char* str1, const char *str2, size_t size); 파라미터 const char* str1 비교할 첫번째 문자열(포인터) 버퍼를 입력한다. (반드시 유효한 포인터(주소)를 입력해야 한다.) NULL 문자로 종료되는 문자열을 권장한다. const char* str2 비교할 두번째 문자열(포인터) 버퍼를 입력한다. (반드시 유효한 포인터(주소)를 입력해야 한다.) NULL 문..

C언어/string.h 2023.07.31
[C언어] strncat 함수 (문자열 연결)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 문자열에 지정한 길이의 문자열을 연결할 때 사용한다. 헤더 #include ※ 함수 사용 시 string.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 char* strncat(char* dest, const char* source, size_t count); 파라미터 char* dest 연결(변경)하려는 target string 버퍼를 입력한다. 반드시 NULL 문자로 종료되어야 한다. 최소 dest + count 만큼의 버퍼크기가 확보되어야 한다. const char* source dest에 연결할 string을 입력한다. NULL 문자로 종료되는것을 권장한다. siz..

C언어/string.h 2023.07.10
[C언어] time 함수 (현재 시간을 초단위로 구하기)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 1970-01-01 00:00:00 이후 현재까지의 시간을 초단위로 계산한다. 헤더 #include ※ 함수 사용 시 time.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 time_t time(time_t* _Time); 파라미터 time_t* _Time time 함수의 반환값을 저장할 time_t 변수의 주소값을 입력한다. NULL을 넣을 경우 파라미터는 무시하고 time 함수의 결과가 반환(return)된다. 반환값 성공시 1970-01-01 00:00:00 이후 현재까지의 시간을 초 단위로 반환한다. 파라미터가 NULL이 아닐 경우 입력한 파라미터에도 값을 반환해 ..

C언어/time.h 2023.04.14
[C언어] atoi 함수 (문자열을 숫자로 변환)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 문자열을 숫자로 변환한다. 헤더 #include ※ 함수 사용 시 stdlib.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 int atoi(const char *str); 파라미터 const char *str 숫자로 변환할 문자열을 입력한다. 반환값 성공시 문자열이 표현하는 숫자를 int형 정수 값으로 반환한다. 실패시 0을 반환한다. 잡학지식 atoi는 실무에서도 자주 사용하는 함수로 string을 int로 변환하는데 사용한다. int형의 범위를 반드시 인지하고 사용하는 것이 좋으며 overflow 혹은 underflow 에 대한 예외를 반드시 확인해야 한다. 비슷한 ..

C언어/stdlib.h 2023.04.02
[C언어] abs 함수 (정수의 절대값 구하기)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 입력받은 정수의 절대값을 계산하기 위해 사용한다. 헤더 #include ※ 함수 사용시 stdlib.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 int abs(int n); 파라미터 int n 절대값을 구할 정수를 입력한다. 반환값 성공시 인자로 전달한 정수 n의 절대값을 반환한다. 오류 반환값이 없다. 잡학지식 abs 함수는 전달 받은 정수 n의 절대값을 반환하는 함수이다. 하지만 int는 대부분의 환경에서 크기 4byte를 가지기에 표현할 수 있는 범위의 한계가 존재한다. (부호비트 포함) int와 long은 무엇이 다를까? [C언어] int 와 long 은 무엇이 ..

C언어/stdlib.h 2023.03.29
[C언어] realloc (heap 메모리 크기 변경)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 이미 할당받은 동적메모리(Heap Memory)의 크기를 변경하기 위해 사용한다. 헤더 #include ※ 함수 사용시 stdlib.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 void* realloc(void* memory, size_t size); 파라미터 void* memory 이미 할당받았던 heap memory의 주소를 입력한다. size_t size 변경할 heap memory의 크기를 입력한다. 반환값 성공시 사용 가능한 heap memory pointer가 반환되고 , 인자로 전달한 memory 가 free 된다. 실패시 NULL이 반환되고 인자로 전달한 ..

C언어/stdlib.h 2023.03.28
[C언어] free 함수 (heap 메모리 해제)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 할당받은 동적메모리(Heap Memory)를 해제하기 위해 사용한다. 헤더 #include ※ 함수 사용시 stdlib.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 void free(void* memory); 파라미터 void* memory malloc, calloc, realloc 과 같은 함수를 통해 할당받은 heap memory 주소를 입력한다. NULL 을 넣어도 문제는 없다. (malloc, calloc, realloc 함수의 경우 실패 시 NULL이 반환된다) 반환값 free 함수는 반환값이 없지만 정상적인 경우 heap memory가 반환된다. 만약 실패시 ..

C언어/stdlib.h 2023.03.26
[C언어] 댕글링 포인터와 와일드 포인터 (Dangling pointer & Wild pointer)

와일드 포인터 (Wild Pointer) Wild Pointer(야생의 포인터). 단어의 의미 그대로 초기화가 안돼서 쓰레기값으로 채워진 포인터를 의미한다. 단어의 정의를 처음 볼 수도 있지만 포인터를 배울 때 가장 기본적으로 듣는 말이다. (포인터 변수는 NULL 초기화를 하는 것이 좋다.) 이유는 매우 간단하다. 개발자가 의도하지 않은 메모리 영역에 접근하여 SIGSEGV 같은 치명적인 오류가 발생할 수 있기 때문이다. 또한 Wild Pointer가 위험한 이유는 복잡한 비즈니스 코드에서 대부분의 포인터 예외처리는 NULL Check를 통해 이루어지는데, Wild Pointer의 경우 쓰레기값으로 채워져 있어 이러한 예외를 무력화하기 때문이다. 와일드 포인터 (Wild Pointer) 예외 처리 Wi..

[C언어] calloc 함수 (초기화된 heap 메모리 할당)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 초기화된 동적메모리(Heap Memory) 할당을 받기 위해 사용한다. 헤더 #include ※ 함수 사용 시 stdlib.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 void* calloc(size_t NumOfElements, size_t SizeOfElements); 파라미터 size_t NumOfElements 메모리를 할당할 elements(요소)의 수 (※ 동적메모리 할당받는 변수의 배열 크기를 입력하며, 배열이 아닐 경우 1을 입력한다.) size_t SizeOfElements 메모리를 할당할 elements(요소)의 크기 (※ 동적메모리 할당받는 변수 ty..

C언어/stdlib.h 2023.03.02
반응형