제가 대학교 1학년 때 C언어 수업에서 배운 내용을 교재와 ppt를 중심으로 정리한 내용입니다. (2022.3 ~ 2022.6)
당시에 공부를 위해서 HWP 파일로 정리해 놓은 것을 그대로 올립니다.
대학에 처음 들어와 정리한 내용이라 모든 내용을 담고 싶은 욕심에 정리가 많이 지져분하고 어설픈점 양해 부탁드립니다..!
문자열 : 연속된 문자들의 모임
‘ ’로 묶어주는 반면, 문자열은 “ ” 로 묶어줌.널 종료 문자열 : 문자열의 끝을 나타내는 널 문자(‘\0’)를 함께 저장하는 문자열
문자열 상수(문자형 리터럴) : 값이 변경되지 않는 문자열
ex) “hello” “\n”와 같이 표현
문자열 변수
저장할 문자열의 길이’ + 1로 지정char 배열명[배열의크기] = {‘a’, ‘b’} 형식으로도 초기화 가능.“ ”)로 초기화.‘\0’)과 빈칸(‘ ’)은 다름.문자 배열의 인덱스를 사용하면, 문자열의 문자를 하나씩 읽거나 변경 가능
문자열 전체를 출력하려면 %s 서식지정자 사용
형식문자열 없이 문자 배열을 직접 printf 함수의 첫 번째 인자로 전달 가능
ex) printf(“%s”, str); 대신 printf(str)
문자열 출력 서식 지정자 %s는 널 문자를 만날 때까지 str 배열의 원소를 모두 출력
문자 배열에 문자열 리터럴을 대입하면 안됨.(컴파일 에러)
printf 함수는 널 문자를 만날 때까지 출력하는데, 배열의 크기보다 긴 문자열로 초기화시 문자열을 끝을 확인할 수 없으므로 쓰레기값이 함께 출력됨
<string.h>를 포함해야함. (종류는 아래에)<ctype.h>를 포함해야함.isalnum(ch); → 알파벳이나 숫자인지 검사isdigit(ch); → 숫자인지 검사isupper(ch); → 대문자인지 검사isxdigit(ch); → 16진수 숫자인지 검사toupper(ch); → 대문자로 변환isalpha(ch); → 알파벳인지 검사islower(ch); → 소문자인지 검사isspace(ch); → 공백 문자인지 검사tolower(ch); → 소문자로 변환 <stdlib.h>int atoi(const char* str); → 문자열을 정수로 변환.double atof(const char* str); → 문자열을 실수로 변환.long atol(const char* str); → 문자열을 long형 값으로 변환.<stdio.h>int sscanf(const char* buff, const char* format, ....); → 문자열을 정수나 실수로 변환해서 읽어옴.int sprintf(char* buff, const char* format, ......); → 형식 문자열을 이용해서 정수나 실수를 문자열로 변환.scanf(“%s”, str); → 공백 문자까지 문자열을 입력받아서 str에 저장.printf(str); printf(“%s”, str); → str을 출력gets_s(str, count); → 한 줄의 문자열을 읽어서 str에 저장.fgets(str, count, stdin); → 한 줄의 문자열을 읽어서 str에 저장.puts(str); → str을 출력하고 줄을 바꿈.strlen 함수 : 널 문자를 제외한 문자열의 길이를 구함 size_t strlen(const char* str);를 원형으로 가짐strcpy 함수 : src문자열을 dest 문자 배열로 복사한 다음 dest를 리턴char* strcpy(char* dest, const char* src); 가 원형 → strcpy(dest, src);dest에는 반드시 문자 배열을 지정(아니면 실행 에러. 변경불가 이기 때문), 두 번째 매개변수인 src에는 문자 배열, 문자 리터럴 전부 사용 가능. strcpy 함수는 dest문자 배열의 크기에 관계없이(공간이 충분한지 확인하지 않고 널 문자까지 1:1로 복사) 무조건 src 문자열을 복사하므로 버퍼 오버런의 위험을 갖고 있음strcpy_s를 대신 사용 → vs에서만 적용. 표준X_CRT_SECURE_NO_WARNINGS 매크로를 라이브러리 헤더 파일을 포함하는 문장 앞에 적어줌 → 대체 코드는 scanf 함수 안정성 문제 해결 코드와 동일strcmp 함수 : lhs 문자열과 rhs 문자열을 알파벳 순으로 비교int strcmp(const char* lhs, const char* rhs); 원형 → srrcmp(lhs, rhs);lhs문자열과 rhs문자열을 알파벳순으로 비교.0, lhs가 rhs 보다 알파벳순으로 앞쪽이면 음수, 뒤쪽이면 양수를 리턴.strcmp함수를 이용해야함.strcat 함수 : dest문자 배열에 저장된 문자열의 끝에 src 문자열을 복사해서 연결.char* strcat(char* dest, const char* src); 가 원형 → strcat(dest, src);dest엔 반드시 문자 배열을 지정해야함.dest 문자 배열에 src 문자열을 연결할 만큼 메모리가 충분한지를 확인하지 않으므로 버퍼 오버런의 위험이 있음.src 자리에 “ ”를 붙이면 됨.strchr 함수 : str에서 ch문자를 찾음strstr 함수 : str에서 substr 문자열을 찾음.char* strchr(const char* str, int ch); → strchr(str, ‘ch’);char* strstr(const char* str, const char* substr); 가 원형 → strstr(str, “substr”);char*형)를 리턴, 찾을수 없으면 NULL을 리턴.strtok 함수 : str문자열을 delim 문자열에 있는 문자들을 이용해서 분리char* strtok(char* str, const char* delim); 가 원형 → strtok(dtr, “delim”); NULL을 리턴strtok 함수 호출 후에 첫 번째 매개변수인 str 이 변경.strtok 함수의 첫 번째 인자로 NULL을 지정하면 계속해서 다음 토큰을 얻을수 있음.NULL이 되는데, strtok()은 토큰으로 사용한 위치를 알기에 NULL뒤 ~ 다음 분리기호 직전까지 토큰으로 만듦.delim이 없지만, NULL문자가 있는 경우 문장의 마지막으로 인식하고 직전까지 토큰으로 만듦.scnaf 함수로 문자열을 받으려면 %s 서식지정자를 이용함.
scanf 함수는 입력 버퍼에서 공백 문자를 만날 때 까지 문자열을 읽어옴 → 공백문자는 받아들이지 못함
빈칸을 포함한 문자를 입력 받으려면 fgets, gets_s 사용
fgets 함수 : 줄바꿈 문자를 만날 때까지 한 줄의 문자열을 파일로부터 읽어오는 함수
char* fgets(char* str, int count(배열의크기), FILE* stream); 가 원형 → fgets(str, sizeof(str), stdin);str(읽어온 문자열)에 줄바꿈 문자도 함께 저장.gets_s 함수 : 줄바꿈 문자를 입력 될 때까지 한 줄의 문자열을 파일로부터 읽어오는 함수
char* gets_s(char* str, size_t n(배열의크기)); 가 원형 → gets_s(str, sizeof(str));str(읽어온 문자열)에 줄바꿈 문자가 포함되지 않음.printf 함수의 첫 번째 인자로 문자열을 바로 전달 가능.
ex) printf(str);
puts 함수 : 한 줄의 문자열을 출력
출력후 자동으로 줄이 바뀜.
int puts(const char* str); 가 원형 → puts(n);
sscanf 함수
int sscanf(const char* buffer, const char* format, ...); → sscanf(str, “%d”, &n);
buffer 문자열로부터 형식 문자열인 format에 지정된 대로 값을 읽어옴(주어진 문자열에서 값을 읽어옴)gets_s 함수와 함께 사용sprintf 함수
int sprintf(char* buffer, const char* format, ...); → sprintf(str, “n = %d”, n);
buffer 문자 배열에 저장(출력할 내용을 문자 배열에 저장)puts 함수와 함께 사용char* 형의 포인터는 char형의 변수 또는 char형 배열의 원소를 가르킬수있음const char* 형을 char* 형으로 변환하면 컴파일 경고가 발생char*const char*const char*const char*char*형의 매개변수를 사용, 배열의 크기도 매개변수로 전달.const char*형의 매개변수를 사용. 문자열의 끝을 널 문자로 확인 가능하므로 배열의 크기를 매개변수로 받아올 필요x. 함수안에서 문자열을 변경해선 안됨.char*형일 때는 문자배열과 char*형의 포인터만 인자로 전달 가능.const char*형일 때는 문자 배열, 문자열 리터럴, char*형의 포인터, const char*형의 포인터를 모두 인자로 전달 가능. 함수 호출 후에도 문자열의 내용 변경x{ } 안에 문자열을 나열해서 초기화.i번째 문자열의 j번째 문자에 접근하려면 행과 열 인덱스 모두 사용.
정리가 잘 된 글이네요. 도움이 됐습니다.