10-11강
10강 문자
문자와 버퍼의 관계를이용하고 활용하는 방법
10-1 아스키 코드
- C언어의 문자는 아스키 코드를 따른다. 1byte로 구성되며 주요 문자를 출력하도록 해준다. (한글은 유니코드)
- character형에 숫자를 넣어서 처리할 수 있다.
char a = 65;
문자와 버퍼의 관계를이용하고 활용하는 방법
char a = 65;
문자 | 아스키코드 |
---|---|
0-9 | 48-57 |
A | 65 |
a | 97 |
#include <stdio.h>
int main(void){
char a = 65;
printf("%c\n",a);
system("pause");
return 0;
}
- 문자 하나만 입력받을 땐
getchar()
함수를 이용할 수 있다.
#include <stdio.h>
int main(void){
char a = getchar();
printf("%c\n",a);
system("pause");
return 0;
}
버퍼(buffer)
문자열을 버퍼의 개념이 많이 사용된다. 버퍼는 임시적으로 특정한 데이터를 저장하기 위한 목적으로 사용된다. 기본적으로 사용자가 의도하지 않아도 C 프로그램은 자동으로 버퍼를 이용해 입출력을 처리한다.
#define _CRT_SECURE_NO_WRANINGS
#include <stdio.h>
int main(){
int a;
char c;
scanf("%d",&a);
printf("%d\n",a);
scanf("%c",c);
printf("%c\n",c);
system("pause");
return 0;
}
100와 c를 입력했을 때 100밖에 출력되지 않는다. 그 이유는 엔터 자체를 c에 담기 때문이다. 즉 c에는 줄 바꿈을 담는다.
#define _CRT_SECURE_NO WARNINGS
#include <stdio.h>
int main(void){
int a;
char c;
scanf("%d",&a);
printf("%d\n",a);
int temp;
while((temp = getchar()) != EOF && temp != '\n'){}
scanf("%c",&c);
printf("%c\n",c);
system('pause');
return 0;
}
while((temp = getchar()) != EOF && temp != '\n'){}
이 코드가 자동으로 개행문자나 파일의 끝이라면 빈코드를 실행함으로 버퍼로 개행문자가 저장되는 것을 막을 수 있다.
11강 문자열
11-1 개념
문자열:문자들의 배열
문자열은 컴퓨터 메모리 구조상에서 마지막에 널(NULL)값 포함.(문자열의 끝을 알리기 위해서)
printf()함수를 실행하면 null값을 발견할 때까지 쭉 출력을 한다.
11-2.문자열과 포인터
문자열 리터럴
어려운 말 같지만 결국 "" 안의 내용을 뜻하는 것이다.
문자열로 받기 위해 묶은 것을 뜻한다. 그러면 읽기 전용으로 상수가 된다.
#include <stdio.h>
int main(void){
char *a = "Hello world";
printf("%s\n",a);
system("pause");
return 0;
}
여기에서 *a에는 "hello world"라는 값이 담기게 된다.
char a = "Hello world!"
와
char *a = "hello world"
는 다르다.
문자열은 배열로 치환될 수 있고 배열은 포인터로 치환될 수 있으니까 포인터 자체를 출력하도록 하면 알아서 null 값을 만날때까지 출력하는 것이다.
포인터-문자열 관계
포인터로 문자열을 선언해도 기존의 배열처럼 처리가능하다
#include <stdio.h>
int main(void){
char *a = "Hello world!";
printf("%c\n", a[1]);
printf("%c\n",a[4]);
printf("%c\n",a[8]);
system("pause");
return 0;
}
한 자리씩 출력하기때문에 %c
를 쓴다.
11-3.문자열 입출력 함수
gets()
scanf()는 공백을 만날때까지 받지만 gets()함수는 공백 포함 한 줄 자체를 입력 받는다.
#define _CRT_SECIRE_NO_WARNINGS
#include <stdio.h>
int main(void){
char a[100];
gets(a);
printf("%s\n",a);
system("pause");
return 0;
}
혹시나 두줄을 입력해보았지만 한 줄만 출력된다. 그러면 두줄을 입력받으려면 어떻게 해야하지?
gets_s()
gets()함수의 버퍼 크기 넘쳐도 받아버리는 취약점을 해결한 함수
버퍼의 크기를 철저히 지킨다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void){
char a[100];
gets_s(a,sizeof(a));
printf("%s\n",a);
system("pause");
return 0;
}
sizeof()
전체 크기가 어느정도인지 알려주는 c언어의 내장함수
버퍼의 크기가 벗어나면 프로그램을 종료시킨다. 즉시 런타임 오류를 발생시킨다.
1-5. 문자열 처리 함수들
<string.h>라이브러리에 포함되어 있다.
strcpy(a,b)
a에 담긴 문자열이 b에 복사된다.
c언어에서는 'a=b'와 같이 간단한 복사가 되지 않기에 쓴다.
strstr()
긴 문자열에서 잛은 문자열을 찾아 그 위치를 반환시킨다.
'짧은 문자열을 찾은 주소 값' 자체를 반환한다.
그래서 단순히 출력하면 찾은 이후의 모든 문자열이 반환이 된다.
#include <stdio.h>
int main(void){
char a[20] = "I like you";
char b[20]= "like";
printf("찾은 문자열:%s\n",strstr(a,b));
system("pause");
return 0;
}
Author And Source
이 문제에 관하여(10-11강), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nara7875/10-11강저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)