본문 바로가기

Language_/C 언어10

[C언어] scanf()함수에서 &(ampersand)를 쓰는 이유 [&(ampersand)에 대하여] c언어를 시작하면 printf에서는 &를 안썼는데, scanf에서는 &를 쓸때가 있고, 안쓸때가 있다.&의 역할은 무엇이며, &는 언제 쓰는 것일까. &(ampersand)의 역할- &(ampersand(앰퍼샌드))는 해당 변수의 주소를 가리키는 역할을 한다.- &를 이해할려면 주소에 대한 개념을 알아야 한다.주소 값000 32001 20 2019. 1. 21.
[c언어] memset 함수에 대하여 [memset] memset 함수- malloc()이나, calloc()에서 할당 받은 메모리를 특정 값으로 초기화 하는 함수.- 보통 어떤 작업을 하기 전에 NULL로 초기화 할 때 많이 사용된다.- [malloc, calloc함수에 대한 글]- calloc은 malloc과 memset(void *ptr, 0, size_t size)의 기능이 합쳐진것이다. (0으로 초기화) memset 함수 형태- void *memset(void *ptr, int value, size_t size);- ptr : 메모리의 크기를 변경할 포인터- value : 초기화 값- size : 초기화 크기 memset 함수 헤더- string.h에도 있고, memory.h에도 함수가 있다. (즉, 둘 중에 하나만 써도 되며, 둘.. 2018. 11. 24.
[c언어] ctype.h 함수 목록 [#include] #include 를 했을때 사용가능한 함수 목록이다.c 문자 분류로써 문자들에 관련된 함수들이 들어있다. #문자 검사 함수# int isalnum(int c) _ alphabet + number _ c가 알파벳 또는 숫자이면 0이 아닌 값을 반환 int isalpha(int c) _ alphabet _ c가 알파벳이면 0이 아닌 값을 반환 int iscntrl(int c) _ control _ c가 제어 문자이면 0이 아닌 값을 반환 int isdigit(int c) _ c가 숫자이면 0이 아닌값을 반환 int isgraph(int c) _ c가 그래픽 문자이면 0이 아닌 값을 반환 int islower(int c) _ lower _ c가 소문자이면 0이 아닌 값을 반환 int isp.. 2018. 10. 31.
[c언어] scanf와 scanf_s의 차이 [scanf와 scanf_s의 차이] 기존에 사용하던 scanf함수는 지정된 버퍼의 크기보다 더 많은 양의 문자를 넣을수 있기 때문에 버퍼오버플로우에 대해서 많이 취약했다.이러한 부분을 보완하고자 만든 함수가 scanf_s이다. _ 즉, 보안을 위해서 보완한 함수이다. scanf와 scanf_s의 사용법은 거의 똑같지만, 문자와, 문자열을 입력받을 경우에 인자값으로 하나를 더 입력해 줘야한다. #include int main() { char arr[20]; scanf("%s",arr); } - scanf 함수는 arr 크기가 20일때 arr에 20이상의 문자를 넣을수 있다는 취약점(버퍼오버플로우)이 있었다. #include int main() { char arr[20]; scanf_s("%s",arr,s.. 2018. 10. 10.
[c언어] Visual Studio 콘솔창 유지 [visual stdio 콘솔창 유지] 첫번째 방법 _ 하위 시스템 변경 - 프로젝트명 우클릭후 속성에 들어간다. - 링커 _ 시스템에서 하위 시스템을 콘솔로 변경해주고 확인을 눌러준다. 두번째 방법 _ system("PAUSE"); 사용하기- 코드에 system("PAUSE");를 넣어준다. _ 보통 return 0;위에 쓴다. 2018. 10. 6.
[c언어] Visual Studio 2017 설치하기 [Visual Studio 사용법] *0 코드로 인해 종료되었습니다 2018. 10. 5.
[c언어] c언어란? [c언어란?] c언어 : 1972년 켄 톰슨과 데니스 리치가 벨 연구소에서 일할 당시 새로 개발된 유닉스 운영 체제에서 사용하기 위해 개발한 프로그래밍 언어. 데니스 리치가 "B"언어를 개선하여 c언어가 탄생했다. 유닉스 바탕의 프로그램은 모두 c언어로 작성되었고, 수많은 운영 체제의 커널 또한 c로 만들어졌다. 오늘날 많이 쓰이는 c++은 c에서 객체 지향 언어로 발전된 것이다. 특징- 이식성이 뛰어나다. _다른 프로그램 언어보다 높은 호환성을 가지고 있고, c언어의 표준함수만 작성된 프로그램은 어떤 기종의 컴퓨터에서도 정상적으로 컴파일이 되고 실행될 수 있다.- 다양성을 가진다. _c언어는 과학 계산용 프로그램뿐만 아니라 FA(공장 자동화), OA(사무 자동화), GUI(Graphic User Int.. 2018. 10. 5.
[c언어] scanf 오류 해결 방법 [scanf 오류 해결] Visual Studio 2013 버전 이상부터 scanf를 사용하면 아래와 같은 에러가 나오면서 컴파일이 안된다.. 에러 메시지를 약간 해석하면 이 함수(scanf)는 취약하다. 대신해서 scanf_s를 사용해라 또는 _CRT_SECURE_NO_WARNINGS를 사용해라 라고 해석할수 있다. [해결방법] _ 아래의 3가지 방법중 하나 사용1. SDL 검사 아니요로 변경 - 프로젝트 명을 우클릭한후 속성 클릭 - C/C++에서 '일반'에 들어가면 SDL 검사가 있다. 아니요로 변경 2. 전처리기 정의 변경 - 프로젝트 명을 우클릭한후 속성 클릭 - C/C++에서 '전처리기'에 들어가면 전처리기 정의가 있다. 뒤에 _CRT_SECURE_NO_WARNINGS; 를 붙여넣어준다. 3... 2018. 10. 2.
[c언어] 메모리 동적할당 #malloc, calloc, realloc [메모리 동적할당] 동적할당 : 프로그램 실행 중 필요한 만큼의 메모리를 할당하는 방식 정적할당 : 프로그램 실행 전 메모리를 할당하는 방식 동적할당을 사용하는 이유- 만약 char name[15] 를 선언하고, 메모리를 12만큼 썻다면 3이라는 크기의 메모리가 낭비되기 때문이다. 또한, 메모리를 19만큼을 사용하고 싶다면 메모리가 초과되므로 name의 크기를 변경해줘야 하는 불편함이 있기 때문에 동적할당을 사용하고 오버플로우의 위험도 있기 때문에 동적할당을 사용한다. 동적할당의 세가지 방법- void *malloc(size_t size) _ size바이트 만큼의 메모리를 힙에서 할당하여 반환- void *calloc(size_t num, size_t size) _ (num*size)바이트 만큼의 메모리.. 2018. 8. 19.
[c언어] 포인터의 크기 포인터의 크기포인터의 크기는 운영체제의 bit수에 따라 달라진다.32비트 시스템의 포인터 크기 : 4바이트64비트 시스템의 포인터 크기 : 8바이트즉 32비트의 int*, double*, char* 의 크기는 모두 4바이트이고64비트의 int*, double*, char*의 크기는 모두 8바이트이다. 포인터 크기 원리포인터 = 메모리 위치를 가리키기 위한 주소를 담는 변수즉, 32비트 라면 CPU의 메모리 접근을 위한 주소가 32비트 만큼 가능하기 때문에 포인터도 32비트(4바이트)가 된다.반면, 64비트 라면 CPU의 메모리 접근을 위한 주소가 64비트 만큼 가능하기 때문에 포인터도 64비트(8바이트)가 된다.이러한 원리로 인해서 포인터의 크기는 차이가 난다. (16비트의 컴파일러에서 포인터의 크기는 .. 2018. 8. 13.