Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- working set
- Private Bytes
- 프로그래밍 기초
- Windows Build
- 메모리 누수
- Cell Look
- Cell Shader
- AppSW
- URP로 변경
- Toon Shader
- ColorGradingLutPass
- 게임 수학
- Rim Light
- 3d
- 개인 바이트
- 가상 바이트
- OculusMotionVectorPass
- 벡터
- VR
- Cartoon Rendering
- Three(Two) Tone Shading
- Virtual Byte
- 작업 집합
- Specular
- URP
- ASW(Application SpaceWarp)
- C언어
Archives
- Today
- Total
WinCNT
C 언어 - 11. 문자열 본문
문자열의 개념
- 문자열 = 문자들의 배열
- 컴퓨터 메모리 구조상 마지막에 NULL(\0)값을 포함한다
- NULL값은 문자열의 끝을 알리는 목적으로 사용
- printf() 함수를 실행하면 컴퓨터는 내부적으로 NULL값이 나올 때까지 출력을 반복함
문자열과 포인터
- 문자열 형태의 포인터를 사용하면 특정 문자열의 주소를 넣게 된다
-
#include<stdio.h> int main(void) { char *a = "Hello World"; //문자열 리터럴 : 배열이 아닌 ""에 문자열이 들어간 구조 printf("%s\n", a); //문자열 리터럴(상수)의 값 printf("%p\n", &a); //포인트 변수 a의 값 system("pause"); return 0; }
- 문자열을 문자열 리터럴로 선언을 하면, 문자열 리터럴은 상수로서 읽기 전용으로 사용됨
- 문자열 리터럴은 컴파일러가 알아서 메모리 주소를 결정함
(위의 코드에서는 포인트 변수 a가 문자열 리터럴의 주소값을 가지고 있다) - 문자열 리터럴은 상수(변경 불가)이기 때문에, 변경 시에는 포인터의 주소를 변경해야 함
- 배열과 포인터는 치환이 가능
즉 포인터로 문자열을 선언했다고 하더라도 배열처럼 처리 가능하다 -
#include<stdio.h> int main(void) { char *a = "Hello World"; //문자열 리터럴 : 배열이 아닌 ""에 문자열이 들어간 구조 printf("%s\n", a); //문자열 리터럴(상수)의 값 printf("%p\n", &a); //포인트 변수 a의 값 //포인트 문자열을 배열처럼 처리할 수 있음 printf("%c\n", a[1]); printf("%c\n", a[4]); printf("%c\n", a[8]); system("pause"); return 0; }
문자열 입출력 함수
- scanf() 함수 : 공백 전까지의 입력을 받음
- gets() 함수 : 공백까지 포함하여 한 줄을 입력받음
단 gets() 함수는 버퍼의 크기를 벗어나도 입력을 받음 - gets_s() 함수 : gets() 함수와 비슷하나, 버퍼의 크기를 철저히 지키며 입력을 받음
범위를 넘으면 그 즉시 런타임(Runtime) 오류가 발생함 -
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main(void) { char a[100]; //scanf("%s",&a); //공백 전까지의 입력을 받음 //printf("%s\n", &a); gets(a); //공백을 포함하여 한 줄을 입력받음 printf("%s\n", &a); gets_s(a, sizeof(a)); //버퍼의 크기를 지키며 공백을 포함하여 한 줄을 입력받음 printf("%s\n", a); system("pause"); return 0; }
문자열 처리를 위한 다양한 함수
- C언어에서의 문자열 함수는 <string.h> 라이브러리에 포함되어 있음
-
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> //최근 C언어에는 string 라이브러리를 기본적으로 포함하는 경우도 있음 int main(void) { char a[50] = "Hello Word!"; char b[50] = "Jojo's Bizarre Adventure"; printf("문자열 a : %s\n", a); printf("문자열 b : %s\n", b); //strlen() : 문자열의 길이를 반환하는 함수 printf("\nstrlen() : 문자열의 길이를 반환하는 함수\n"); printf("문자열 a의 길이 : %d\n", strlen(a)); //strcmp() : 문자열을 사전 순으로 비교하는 함수 printf("\nstrcmp() : 문자열을 사전 순으로 비교하는 함수\n"); printf("두 문자열의 사전 순 비교 : %d\n", strcmp(a, b)); //strcpy() : 문자열을 복사하는 함수 printf("\nstrcpy() : 문자열을 복사하는 함수\n"); strcpy(a, b); printf("복사 후의 문자열 a : %s\n", a); //strcat() : 문자열을 합치는 함수 printf("\nstrcat() : 문자열을 합치는 함수\n"); char c[50] = "Hello Word!"; printf("문자열 b : %s\n", b); printf("문자열 c : %s\n", c); strcat(c, b); printf("문자열 c에 b를 합한 값 : %s\n", c); //strstr() : 특정 문자열을 찾아 그 위치를 반환하는 함수 //특정 문자열을 찾은 주소 값 자체를 반환하므로 단순히 출력하면 찾은 이후 모든 문자열을 반환함 printf("\nstrstr() : 특정 문자열을 찾아 그 위치를 반환하는 함수\n"); char d[20] = "I like you"; char e[20] = "like"; printf("문자열 d : %s\n", d); printf("문자열 e : %s\n", e); printf("찾은 문자열 : %s\n", strstr(d, e)); system("pause"); return 0; }
'Study > C' 카테고리의 다른 글
C 언어 - 13. 다차원 배열과 포인터 배열 (0) | 2021.09.08 |
---|---|
C 언어 - 12. 컴퓨터가 변수를 처리하는 방법 (0) | 2021.09.06 |
C 언어 - 10. 문자 (0) | 2021.08.05 |
C 언어 - 09. 포인터 (0) | 2021.08.03 |
C 언어 - 08. 배열 (0) | 2021.08.03 |