[차례]
7. 문자와 문자열
7. 문자와 문자열
8. 구조체
9. 파일 입출력
[7. 문자와 문자열 관련 함수]
1.스트림
stdin / 표준 입력 스트림 / 키보드 대상으로 입력
stout / 표준 출력 스트림 / 모니터 대상으로 출력
stderr / 표준 에러 스트림 / 모니터 대상으로 출력
2.
-문자 출력 함수
int putchar(int c) //인자로 전달된 문자를 모니터로 출력
int fputc(int c, FILE * stream) //인자로 전달된 문자를 두번째 인자로 출력(모니터/파일)
-문자 입력 함수
int getchar() //문자를 키보드로 입력
int fgetc(FILE * stream) //문자를 인자에 따라 입력(변수/파일 등)
함수가 int형인 이유는 EOF(end of file)이 int 형(-1)이기 때문이다.
3.
문자열 출력 함수
int puts(const char * s)
int fputs(const char * s, FILE * stream)
-문자열 입력 함수
char * gets(char * s) //키보드로 매개변수(문자열)을 입력받는다.
char * fgets(char *s, int n, FILE * stream) //(문자열, 입력받을 크기, 입력받을 타입)
//10개의 문자들을 입력하면 9개가 저장된다. 마지막에 NULL이 추가되기 때문이다.
//\n같은 개행문자로 하나의 문자로 인식하여 읽는다.
4.
출력버퍼를 비우는 fflush 함수
출력버퍼가 비워진다는 것은 출력버퍼에 저장된 데이터가 버퍼를 떠나 목적지로 이동됨을 뜻하기도 한다.
int fflush(FILE * stream)
함수 성공시 0, 실패시 EOF
5.
입출력 이외의 문자열 관련함수
#include <string.h>
[ 크기반환(without null) ]
size_t strlen(const char *s) //문자열 길이를 반환, 널 문자는 길이에 포함하지 않는다.
//sizeof(number) 함수는 널 문자를 길이에 포함한다.
[복사]
char * strcpy(char * dest, const char* src) //scr->dest에 문자열 복사
char * strncpy(char * dest, const char* src, size_t n) //
Ex)
char str[10]="123456789"; //마지막은 null이 저장되어야 한다.
char arr[5];
strncpy(arr,str,sizeof(arr)-1); //arr크기는 5이지만 null을 생각해서 4를 복사한다.
arr[sizeof(arr)-1]=0; //마지막에 null문자를 넣어줘야 한다.
puts(arr); //정상 출력
[덧붙이기]
char * strcat(char * dest, const char * src)
char * strncat(char * dest , const char* src, size_t n); //n=7이라고 하면 null문자 합쳐 8
//null 문자가 저장된 위치에서부터 덧붙혀진다.
[비교]
int strcmp(const char * s1, const char * s2) //문자내용이 같으면 0, 아니면 0아닌 값 반환
int strncmp(const char * s1, const char * s2, size_t n) //부분비교
6.
그 이외의 변환 함수들
#include <stdlib.h>
int atoi(const char * str); //문자열 내용을 int형으로 반환
long atol(const char * str); //문자열 내용을 long형으로 반환
double atof(const char * str); //문자열 내용을 double형으로 반환
[8. 구조체]
1. 정의
struct point{
int x;
double y;
}
void main(){
struct point pos;
pos.x = 10;
pos.y = 2.2;
//다른 초기화 방법 pos={10,2.2};
}
2.
구조체의 배열
struct point pos[3];
int i = 1;
pos[i].x=10;
pos[i].y= 2.2;
//또는 struct point pos[3]= { {10, 2.2}, {20, 3.3}, {40, 5.5} };
3.
구조체 변수 포인터
struct point pos= {10, 2.2};
struct point * ppos = &pos;
(*ppos).x = 20; //pos의 값을 20, 55로 바꾼다.
ppos->y= 5.5;
4.
typedef 선언
ex)typedef int NUMBER //int자료형을 NUMBER로 사용하겟다.
void main(){
NUMBER i = 20;
}
이를 구조체에도 적용하면
typedef struct point{ //point는 생략가능하다. 그러나 'struct point pos' 변수 선언을 불가.
int x;
double y;
}Point
void main(){
Point pos = {10, 2.2};
}
5. 함수로의 구조체 변수
void function(Point pos){ //전달 매개변수
printf.....
}
Point Getpos(void){ //반환형
....
return Point형 변수
}
6. 구조체의 연산
-대입 연산은 가능하다. Point pos1 ={1, 2}; Point pos2 = pos1; (O)
-산술 연산은 정형화 할 수는 없다.
Point pos1 = {2,5}; Point pos2 ={5, 1};
pos1 += pos2; (X)
pos1.xpos+=post2.xpos; pos1.ypos+=post2.ypos; (O)
7. 공용체
- 구조체와는 메모리 공간에 할당하는 방식에서 차이가 있다.
- 다양한 접근방식을 제공
typedef struct{ //구조체 Size = 4+8=12byte;
int p1;
double p2;
} Point;
typedef union{ //공용체 Size = 가장 큰 자료형 기준 = 8byte;
int p1; //한 곳의 메모리로 여러 변수들이 공용으로 사용한다.
double p2;
} Upoint;
8. 열거형
[9. 파일 입출력]
1. fopen함수
-프로그램상에서 파일과의 스트림(다리)을 형성한다.
-#include <stdio.h>
FILE * fopen(const char * filename, const char * mode);
스트림 정보를 FILE이란 구조체(표준)에 담아 그 변수의 주소값을 반환한다.
첫 번째 인자는 '스트림을 형성할 파일의 이름' , 두 번째는 '형성할 스트림의 종류'이다.
-Ex)컴파일 할 프로젝트에 'data.txt' 파일을 만든다.
FILE *fp = fopen("data.txt","wt");
if(fp==NULL){
puts("file open fail"); //파일이 존재하지 않을 시
return -1; //비정상적 종료를 의미하기 위해 -1반환
}
fputc('a',fp);
fputc('B',fp);
fputs("hellow world",fp);
fclose(fp); //스트림 종료
2. fclose함수
-int fclose(FILE * stream);
성공시 0, 실패서 EOF를 반환
자원을 반환하고, 버퍼링 되었던 데이터 출력(fflush기능)
3.파일 개방모드(fopen의 두번 째 인자)
-r 읽기 기능 : 파일 없으면 에러
w 쓰기 기능 : 파일 없으면 생성
a 파일 끝에 덧붙여 쓰기 기능 : 파일 없으면 생성
t : 문자데이터
b : 바이너리 데이터 (음원, 동영상)
-Ex) rt는 문자데이터를 읽어라. wb 이진데이터를 써라.
4. feof함수
-#include <stdio.h>
int feof(FILE * stream)
파일 끝에 도달한 경우 0이 아닌 값 반환
Ex)
FILE * src=fopen("src.txt","rt");
FILE * des=fopen("des.txt","wt");
char str[20];
while(fgets(str,sizeof(str),src)!=NULL)
fputs(str,des);
if(feof(str)!=0)
puts("success");
else
puts("fail");
fclose(src);
fclose(des);
5. 바이너리 데이터 입출력 fread, fwrite
함수)
#include <stdio.h>
size_t fread(void * buffer, size_t size, size_t count, FILE * stream);
->성공시 전달 인자 count, 실패/파일 끝 도달시 count보다 작은 값 반환.
#include <stdio.h>
size_t fwrite(const void * buffer, size_t size, size_t count, FILE * stream);
->성공시 전달 인자 count, 실패/파일 끝 도달시 count보다 작은 값 반환.
6. 파일 위치 지시자
-파일 구조체 멤버 중 파일의 위치 정보를 저장하고 있는 멤버. 함수가 호출 될 때마다 참조 및 갱신된다.
-파일 위치 지시자의 이동
#include <stdio.h>
int fseek(FILE * stream, long offset, int wherefrom); //파일구조체, 이동크기, 기준점
->성공 시 0, 실패 시 0이 아닌 값을 반환
-wherefrom
SEEK_SET(0) //파일 맨 앞에서부터 이동을 시작
SEEK_CUR(1) //현재 위치에서부터 이동을 시작
SEEK_END(2) //파일 맨 끝에서부터 이동을 시작
-현재 파일 위치 지시자의 위치
long ftell(FILE * stream);
->파일 위치 지시자의 위치 정보를 반환
5. 함수로의 구조체 변수
void function(Point pos){ //전달 매개변수
printf.....
}
Point Getpos(void){ //반환형
....
return Point형 변수
}
6. 구조체의 연산
-대입 연산은 가능하다. Point pos1 ={1, 2}; Point pos2 = pos1; (O)
-산술 연산은 정형화 할 수는 없다.
Point pos1 = {2,5}; Point pos2 ={5, 1};
pos1 += pos2; (X)
pos1.xpos+=post2.xpos; pos1.ypos+=post2.ypos; (O)
7. 공용체
- 구조체와는 메모리 공간에 할당하는 방식에서 차이가 있다.
- 다양한 접근방식을 제공
typedef struct{ //구조체 Size = 4+8=12byte;
int p1;
double p2;
} Point;
typedef union{ //공용체 Size = 가장 큰 자료형 기준 = 8byte;
int p1; //한 곳의 메모리로 여러 변수들이 공용으로 사용한다.
double p2;
} Upoint;
[9. 파일 입출력]
1. fopen함수
-프로그램상에서 파일과의 스트림(다리)을 형성한다.
-#include <stdio.h>
FILE * fopen(const char * filename, const char * mode);
스트림 정보를 FILE이란 구조체(표준)에 담아 그 변수의 주소값을 반환한다.
첫 번째 인자는 '스트림을 형성할 파일의 이름' , 두 번째는 '형성할 스트림의 종류'이다.
-Ex)컴파일 할 프로젝트에 'data.txt' 파일을 만든다.
FILE *fp = fopen("data.txt","wt");
if(fp==NULL){
puts("file open fail"); //파일이 존재하지 않을 시
return -1; //비정상적 종료를 의미하기 위해 -1반환
}
fputc('a',fp);
fputc('B',fp);
fputs("hellow world",fp);
fclose(fp); //스트림 종료
2. fclose함수
-int fclose(FILE * stream);
성공시 0, 실패서 EOF를 반환
자원을 반환하고, 버퍼링 되었던 데이터 출력(fflush기능)
3.파일 개방모드(fopen의 두번 째 인자)
-r 읽기 기능 : 파일 없으면 에러
w 쓰기 기능 : 파일 없으면 생성
a 파일 끝에 덧붙여 쓰기 기능 : 파일 없으면 생성
t : 문자데이터
b : 바이너리 데이터 (음원, 동영상)
-Ex) rt는 문자데이터를 읽어라. wb 이진데이터를 써라.
4. feof함수
-#include <stdio.h>
int feof(FILE * stream)
파일 끝에 도달한 경우 0이 아닌 값 반환
Ex)
FILE * src=fopen("src.txt","rt");
FILE * des=fopen("des.txt","wt");
char str[20];
while(fgets(str,sizeof(str),src)!=NULL)
fputs(str,des);
if(feof(str)!=0)
puts("success");
else
puts("fail");
fclose(src);
fclose(des);
5. 바이너리 데이터 입출력 fread, fwrite
함수)
#include <stdio.h>
size_t fread(void * buffer, size_t size, size_t count, FILE * stream);
->성공시 전달 인자 count, 실패/파일 끝 도달시 count보다 작은 값 반환.
#include <stdio.h>
size_t fwrite(const void * buffer, size_t size, size_t count, FILE * stream);
->성공시 전달 인자 count, 실패/파일 끝 도달시 count보다 작은 값 반환.
//size*count만큼 데이터를 stream으로 읽고 buffer에 저장해라.
//size*count만큼 데이터를 buffer에 쓰고 stream에 저장해라.
-파일 구조체 멤버 중 파일의 위치 정보를 저장하고 있는 멤버. 함수가 호출 될 때마다 참조 및 갱신된다.
-파일 위치 지시자의 이동
#include <stdio.h>
int fseek(FILE * stream, long offset, int wherefrom); //파일구조체, 이동크기, 기준점
->성공 시 0, 실패 시 0이 아닌 값을 반환
-wherefrom
SEEK_SET(0) //파일 맨 앞에서부터 이동을 시작
SEEK_CUR(1) //현재 위치에서부터 이동을 시작
SEEK_END(2) //파일 맨 끝에서부터 이동을 시작
-현재 파일 위치 지시자의 위치
long ftell(FILE * stream);
->파일 위치 지시자의 위치 정보를 반환
댓글 없음:
댓글 쓰기