All 215

스트림과 파일 개방 모드 (파일 입출력)

1. 스트림(stream) 프로그램상에서 모니터와 키보드를 대상으로 데이터를 입출력 하기 위해 다리 역할을 하는 매개체 - stdin : 표준 입력 스트림, 키보드 대상으로 입력 - stdout : 표준 출력 스트림, 모니터 대상으로 출력 - stderr : 표준 에러 스트림, 모니터 대상으로 출력 콘슬 입출력을 위한 '입력 스트림'과 '출력 스트림'은 프로그램의 실행과 종료에 따라 자동적으로 생성,소멸되는 스트림이다. 2. 파일스트림 형성 (fopen) FILE* fopen(const char* filename, const char* mode); FILE* : 파일 정보가 담기는 FILE 구조체(파일)를 가리키는 포인터이다. fopen 함수의 첫번째 인자는 스트림을 형성할 파일의 이름, 두번째 인자는 ..

카테고리 없음 2019.05.08

scanf에서 파라미터에 &를 붙이는 이유

포인터와 배열의 관계에서의 큰따옴표 큰 따옴표 ""로 묶인 문자열은 메모리 공간에 저장된 후 그 주소값이 반환된다. printf("I love you"); 는 printf(주소값); 이란 뜻이고 char * str[2] = {"I","love","you"}; 는 char * str[2] = {주소값1, 주소값2, 주소값3}; 이란 뜻이다. scanf는파라미터로 주소값들을 받기 때문에 scanf("%d %s", &num, &str) 이렇게 큰 따옴표로 묶이거나, &를 붙인 주소값들이 파라미터로 들어간다.

카테고리 없음 2019.05.08

입출력 버퍼란? 버퍼 비우기

표준 입출력 함수(printf, scanf, fputc, fgetc 등)을 통해 데이터를 입출력하는 경우 데이터들은 운영체제가 제공하는 메모리 버퍼를 중간에 통과하게 된다. 메모리 버퍼는 데이터들이 임시로 저장되는 공간이라고 할 수 있다. 물건을 나를 때 하나씩 손으로 들고가는것보다, 수레에 실어 한꺼번에 옮기는게 나은 것 처럼 버퍼는 데이터 전송을 효율적으로 가능하게 해준다. fflush() - 버퍼 비우기 예를 들어 출력버퍼가 다 차서 자동으로 비워지는걸 기다리지 않고 임의로 버퍼에 저장된 데이터를 목적지로 이동시킨 다음(출력) 버퍼를 비우려면 fflash() 함수를 사용하면 된다. fflush(stdout); // 인자로 받은 스트림의 버퍼를 비운다 이 함수는 파일을 대상으로도 호출이 가능하기 때문..

카테고리 없음 2019.05.08

배열과 문자열, 포인터와 문자열

배열과 문자열 배열의 이름(arr)은 주소를 가리키니까 포인터라 볼 수 있다. 문자열도 배열이니 주소로 관리되므로 문자열의 시작 주소를 알면 저장된 문자들에 접근이 가능하다. char array[]="ABCD"; printf("%s", array); // ABCD 출력 printf("%s", array+1); // BCD 출력 printf("%s", array+2); // CD 출력 printf("%s", array+3); // D 출력 포인터와 문자열 당연히 포인터로도 문자열을 표현할 수 있다. char* p = "ABCD"; // char* p = &array[0]; printf("%s", p); // ABCD 출력 printf("%s", p+1); // BCD 출력 printf("%s", p+2);..

카테고리 없음 2019.05.08

배열 포인터 (2차원 배열과 포인터)

int arr[3][3] 이란 2차원배열이 있다고 하자. printf("%p",arr); printf("%p",arr[0]); 은 동일한 결과값을 출력한다. 그러나 arr 과 arr[0] 은 서로 다른 것이다. arr 의 사이즈를 출력하면 배열 전체의 사이즈가 나오고 arr[0] 의 경우 한 행의 사이즈가 나온다. 2차원 배열의 증감연산 int arr1[3][2]; int arr2[2][3]; arr1, arrr1+1, arr1+2 는 8씩 증가한다 (4바이트 x 2열) arr2, arr2+1 은 12씩 증가한다 (4바이트 x 3열) 즉 이중배열의 증감연산의 공식은 ( 자료형의크기 x 열의 수 ) 이다. 그리고 연산결과는 각 행의 첫번째 요소의 주소값이다. 예를 들면 arr1+1 은 arr1[1][0] ..

카테고리 없음 2019.05.08

배열의 초기화

초기화를 하는 이유 C에선 배열이 스택에 잡힌다. 스택에 잡히는 변수는 실행 전인 컴파일 시점에서 알아야 하기 때문에, 실행 중 입력 받아 크기를 잡을 수 없다. 따라서 배열의 크기는 반드시 상수로 선언되어야 한다. 초기화 방법 1차원 배열의 초기화는 너무 간단하므로 생략한다. 2차원 배열을 함수 내에서 선언하면 자동변수와 같이 쓰레기값이 초기화된다. 그러므로 배열의 기억공간을 누적변수로 사용하거나 특정 값을 저장할 필요가 있을 때는 선언과 동시에 초기화할 필요가 있다. 2차원 배열을 초기화 하는 방법은 1차원 배열을 초기화 하는 방식과 같다. 전체 기억공간의 개수만큼 중괄호 안에 초기값을 나열하면 된다. int num[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}..

카테고리 없음 2019.05.08

함수 포인터

함수도 변수처럼 메모리 공간에 저장된다. 함수 포인터는 메모리 상에 저장된 함수의 주소 값을 저장한다. 함수의 이름도 함수가 저장된 메모리 공간의 주소값을 의미한다. 함수포인터의 형(type)은 반환형과 매개변수의 선언을 기준으로 구분한다. double Func(double num1, double num2) {...} double (*fptr) (double,double); // 함수 포인터 선언 fptr = Func; // 함수 포인터 변수에 함수의 주소값 저장 fptr(3.14, 2.0); // Func(3.14, 2.0); 과 동일한 결과 예시) #include int Compute(int num1, int num2, int num3, int (*Func)(int a,int b,int c)) { r..

카테고리 없음 2019.05.08

Antimalware Service Excutable 점유율 줄이기

평소에는 괜찮은데, 개발할 때, 예를 들면, 이클립스와 같은 IDE를 실행할 때 Antimalware Service Excutable이 검사를 자동으로 실시하여 CPU와 메모리를 잡아먹고 이클립스 실행이 안 될 때가 있다. 이럴 때는 위와 같은 프로그램들을 검사 예외 항목으로 설정해 주면 된다. Windows Defender 검사 항목 제외 설정 - 업데이트 및 보안 - Windows 보안 - 바이러스 및 위협 방지 - 설정관리 - 제외 - 제외 사항 추가 - 프로세스 - eclipse.exe

기타 2019.05.08

공유기 인터넷 연결 안 될 때 (WAN 포트가 연결 안 될 때)

WAN 포트에 불이 들어온다면 제품에 문제가 없을 수 있습니다. 공유기쪽으로 연결되는 인터넷 메인선의 랜 케이블을 교환가능하시다면 교환 후 다시한번 설치해보시기 바라며, 유선으로 연결된 컴퓨터에서는 다음과 같이 설정하시면 도움이 되실 수 있습니다. 공유기 설정화면 192.168.0.1 접속 후 관리도구 > 고급설정 > 트래픽관리 > 링크 설정 정보에서 WAN의 설정을 "수동" 10Mbps / FULL로 변경 후 우측의 적용을 눌러주시기 바랍니다.

기타 2019.05.08