반응형
typedef 선언

아래의 코드처럼 typedef (자료형) (정의이름); 으로 선언되고

1번과 2번 코드는 똑같이 작동하고, 3번과 4번 코드도 똑같이 작동합니다.

typedef int INT;
INT num;	// 1
int num;	// 2

INT* ptr;	// 3
int* ptr;	// 4

 

 

 

구조체 typedef 선언

아래의 코드에서 1번은 구조체 point를 정의하고 struct point에 Point라는 이름으로 typedef선언을 한것이다.

2번은 구조체 point를 정의하면서 동시에 Point라는 이름으로 typedef선언 또한 동시에 한것입니다.

point는 생략가능합니다. 아래의 2번 코드처럼 사용하시면 됩니다!

// 1
struct point
{
    int xPos;
    int yPos;
 };
 typedef struct point Point;
 
 // 2
 typedef struct point	// point는 생략 가능
 {
     int xPos;
     int yPos;
 }Point;

 

 

 

구조체 typedef선언 하는 이유

구조체 변수를 사용할때 struct키워드를 항상 붙여줘야 했지만,

구조체에 typedef선언을 하면 struct키워드를 생략할 수 있습니다.

그렇기에 구조체에 typedef선언을 해주는 것입니다.

 

 

반응형

 

반응형

'C' 카테고리의 다른 글

구조체 변수 연산, 초기화  (0) 2023.05.23
구조체 변수 전달과 반환  (0) 2023.05.23
구조체  (0) 2023.05.22
문자열 관련 함수  (0) 2023.05.22
표준 입출력 버퍼  (0) 2023.05.22
반응형
구조체의 정의

여러 데이터형을 하나의 묶음으로 새로운 자료형을 정의하는 것이다.

프로그래머가 정의한 자료형이기에 '사용자 정의 자료형(user defined data type)'이라 한다.

 

구조체는 아래의 코드처럼 정의 및 선언할 수 있다.

struct point
{
    int xPos;	// 멤버변수
    int yPos;	// 멤버변수
};

 

 

 

구조체 변수 선언, 접근

구조체는 아래의 코드처럼 struct type_name val_name; 으로 선언이 가능하다

struct point pos;
struct person man;

 

멤버변수 접근 방식

구조체 변수의 이름.구조체 멤버의 이름

 

맨 밑에서의 방식은 구조체 멤버변수에 각 대응되는 값을 순차적으로 넣어주는 방식입니다.

struct point
{
    int xPos;
    int yPos;
};
struct person
{
    char name[20];
    char phoneNum[20];
    int age;
};

pos.xPos = 10;	// 구조체 변수 pos의 멤버 xPos에 10을 저장

struct person man = {"홍길동", "010-8923-9520", 20};	// 구조체 변수에 각각 대응되는 값 저장

 

 

 

구조체 정의와 동시에 변수 선언

아래의 코드처럼 구조체를 선언하면서 동시에 구조체 변수 또한 선언할 수 있다.

아래와 같은 방식은 잘 사용되지 않는다.

struct point
{
    int xPos;
    int yPos;
}pos1, pos2, pos3;

 

 

 

구조체를 정의하는 이유
  • 연관 있는 데이터를 하나로 묶을 수 있는 자료형을 정의할 수 있다.
  • 데이터의 표현 및 관리가 용이.
  • 위의 이유로 인해 합리적인 코드를 작성할 수 있다.

 

반응형

 

반응형

'C' 카테고리의 다른 글

구조체 변수 전달과 반환  (0) 2023.05.23
구조체 typedef 선언  (1) 2023.05.23
문자열 관련 함수  (0) 2023.05.22
표준 입출력 버퍼  (0) 2023.05.22
문자와 문자열 함수  (0) 2023.05.22
반응형
strlen함수 : 문자열 길이 반환

문자열의 길이 반환, 널 문자는 길이에 포함되지 않는다.

size_t strle(const char* s);

 

 

 

strcpy, strncpy : 문자열 복사 함수

strcpy : 두번째 인자의 값을 첫번째 인자에 복사.

strncpy : n 길이만큼만 두번째인자를 첫번째 인자에 복사, 널문자는 복사해주지 않는다.

char* strcpy(char* dest, const char* src);
char* strncpy(char* dest, const char *src, size_t n);

 

 

 

strcat, strncat : 문자열 덧붙이는 함수

strcat : 두번째 인자를 첫번째 인자 뒤에 연결시킨 주소 값을 반환

strncat : 두 번째 인자 n 길이만큼만 첫번째 인자 뒤에 연결시킨 주소 값을 반환,

널 문자를 포함하여 n+1개의 문자를 덧붙인다.

char* strcat(char* dest, const char* src);
char* strncat(char* dest, const char* src, size_t n);

 

 

 

strcmp, strncmp : 문자열 비교 함수

문자열의 내용이 같으면 0, 같지 않으면 0이 아닌 값 반환

 

  • s1 이 더 크면 0보다 큰 값 반환
  • s2가 더 크면 0보다 작은 값 반환
int strcmp(const char* s1, const char* s2);
int strncmp(const char* s1, const char* s2, size_t n);

 

 

 

atoi, atol atof : 변환함수

헤더파일 stdlib.h 에 선언되어 있다.

 

atoi : 문자열의 내용을 int형으로 변환

atol : 문자열의 내용을 long형으로 변환

atof : 문자열의 내용을 double형으로 변환

int atoi(const char* str);
long atol(const char* str);
double atof(const char* str);

 

반응형

 

반응형

'C' 카테고리의 다른 글

구조체 typedef 선언  (1) 2023.05.23
구조체  (0) 2023.05.22
표준 입출력 버퍼  (0) 2023.05.22
문자와 문자열 함수  (0) 2023.05.22
함수 포인터  (0) 2023.05.19
반응형
입출력 버퍼
  • 버퍼는 특정 크기의 메모리 공간을 의미
  • 운영체제가 버퍼를 생성하여 제공
  • 입출력 함수로 데이터 입출력 시 버퍼를 거친다.

출력함수가 반환 될 때 출력버퍼로 데이터가 전송된다.

엔터를 입력할 때 입력버퍼로 데이터가 전달된다.

 

 

 

fflush 함수 : 출력버퍼 비우는 함수

출력버퍼를 비워주는 함수.

출력버퍼를 비운다는것은 데이터를 지우는 것이 아니라,

저장된 데이터를 전송한다는 뜻.

fflush(stdout);

 

 

입력버퍼 비우는 방식

입력버퍼의 비움은 입력버퍼에 저장된 데이터의 소멸을 뜻한다.

아래의 방식으로 입력버퍼를 비울 수 있다.

while(getchar() != '\n');

 

반응형

 

반응형

'C' 카테고리의 다른 글

구조체  (0) 2023.05.22
문자열 관련 함수  (0) 2023.05.22
문자와 문자열 함수  (0) 2023.05.22
함수 포인터  (0) 2023.05.19
다차원 배열과 포인터의 관계  (0) 2023.05.18
반응형
스트림과 데이터의 이동

데이터는 한 방향으로 이동하는데 이것이 물이 흐르는 것과

유사하여 스트림(물의 흐름)이라 부릅니다.

 

이 스트림은 입출력장치에 사용된다.

 

컴퓨터 내부로의 데이터 이동은 입력,

외부로의 데이터 이동은 출력이다.

 

출력 스트림, 입력 스트림이 존재하기에 데이터 입출력이 가능하다.

 

입출력 스트림은 OS에서 데이터의 입출력을 위한 소프트웨어를 뜻한다.

 

 

 

스트림 생성 소멸
  • stdin : 표준 입력 스트림 / 키보드 대상으로 입력
  • stdout : 표준 출력 스트림 / 모니터 대상으로 출력
  • stderr : 표준 에러 스트림 / 모니터 대상으로 출력

스트림은 프로그램 시작과 동시에 형성되고 종료시 소멸된다.

출력 리다이렉션이라는 것을 통해서 stdout과 stderr이

향하는 데이터 전송 방향을 달리 할 수 있다.

 

 

 

문자 입출력 함수
  • 하나의 문자 출력 함수

함수호출 성공 시 문자정보, 실패 시 EOF 반환

EOF란 ? define상수 : -1

int putchar(int c);	// 인자로 전달된 문자를 출력
int fputs(int c, FILE* stream);	// 두 번째 인자를 통해서 출력대상 지정

 

  • 하나의 문자 입력 함수

파일 끝에 도달, 함수 호출 실패 시 EOF 반환

int getchar(void);	// 입력된 문자 정보 반환
int fgets(FILE* stream);	// 입력 받을 대상정보 인자로 전달

 

 

 

문자 입출력 예제
	int ch1, ch2;
	scanf("%c", &ch1);	// 123 입력, ch1 = 1

	ch1 = getchar();	// 2 입력
	ch2 = fgetc(stdin);	// 3 입력

	putchar(ch1);		// 2 출력
	fputc(ch2, stdout);	// 3 출력

 

콘솔창에서의 Ctrl + Z 는 EOF를 뜻한다.

 

 

puts, fputs : 문자열 출력 함수

성공 시 0이 아닌 값을, 실패 시 EOF 반환

int puts(const char* s);		// 문자열 출력 후 개행O
int fputs(const char* s, FILE* stream);	// 문자열만 출력, 개행X

 

 

gets, fgets : 문자열 입력 함수

파일의 끝에 도달하거나 함수호출 실패 시 NULL 포인터 반환

  • gets : 입력된 문자열의 길이가 배열을 넘어설 경우 할당 받지 않은 메모리 참조하는 오류 발생
  • fgets : 입력을 널 문자를 포함하여 n의 크기만큼 str에 저장한다.
char* gets(char* s);	// 문자열 입력
char* fgets(char* s, int n, FILE* stream);	// 문자열 입력

 

 

fgets 함수 예제

아래의 예제에서 fgets는 최대 6개의 문자를 입력받을 수 있다.

입력이 6개를 넘으면 그 다음 fgets로 넘어가게 되고, 6개를 안넘으면

입력을 계속 받는다. 엔터키와 공백또한 문자열로 받는다.

char str[7];
for(int i = 0; i < 3; i++)
{
    fgets(str, sizeof(str), stdin);
    printf("Read %d: %s \n", i+1, str);
}

// 입력 1 : 1234567890124567890
// Read 1: 123456
// Read 2 : 789012
// Read 3 : 345678

// 입력 2: Hi
// Read 1 : Hi
// 입력 : Hello
// Read 2 : Hello
// 입력 : good morning
// Read 3 : good m

 

반응형

 

반응형

'C' 카테고리의 다른 글

문자열 관련 함수  (0) 2023.05.22
표준 입출력 버퍼  (0) 2023.05.22
함수 포인터  (0) 2023.05.19
다차원 배열과 포인터의 관계  (0) 2023.05.18
다중포인터  (0) 2023.05.18

+ Recent posts