C,C++ 기초 핵심설명/ 문자열과 str (문자열로 메뉴 만드는 예제)
-strchr() 함수는 str에서 첫번째 ch문자를 찾고, strstr함수는 str에서 첫번째 substr 문자열을 찾고 그 위치의 문자의 주소를 반환한다
-strtok 함수는 str문자열을 delim 문자열에 있는 구분문자들을 이용해서 token으로 쪼개고 토큰 주소를 리턴 (구분자: space , . -)
-문자를 입력하는 함수는 scanf() 함수인데 공백문자를 만날때까지만 읽어옴, 따라서 빈칸 포함한 문자열 입력하려면 get_s 함수나 fgets 함수를 이용
-한 줄의 문자열 출력하려면 puts함수 이용 ( int puts(const char* str); )
-문자열 포인터 : char* p = "asdad"; (주로 문자 배열을 가리키는 데 사용됨)
-문자열 리터럴은 리터럴의 주소를 의미한다 (리터럴: 상수화변수에 대입되는 고정된 값) ,메모리에 할당됨 (값 변경 불가)
-const char* 형의 문자열 포인터는 문자열 리터럴을 가르키는 용도로 사용 (변경불가)
정리하면
char* 의 포인터는 변경할 수 있는 문자 배열 가르킬 때, (문자열이 출력 매개변수 일 경우, 근데 이렇게 쓸 때는 배열 크기도 매개변수로 전달)
const char* 형의 포인터는 변경할 수 없는 읽기전용 문자열을 가르킬 때 사용 (문자열 리터럴 같은, or 문자열이 입력 매개변수)
-i번째 문자열의 j번째 문자에 접근하려면 행(문자열의 갯수) 인덱스와 열(문자열의 길이) 인덱스를 모두 사용한다 (2차원 문자배열)
문자열로 메뉴판 만드는 예제
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main(void)
{
const char* str_menu[] = { //str_menu는 원소가 5개인 포인터 배열
"end", "new", "open", "save", "print"
};
int sz_menu = sizeof(
str_menu / sizeof(str_menu[0]); //포인터 배열의 크기
int menu;
while(1) {
int i;
for(i = 0; i<sz_menu; i++) // 포인터 배열의 크기만큼 while문 반복
printf("%d. %s\n", i, str_menu[i]); //str_menu가 가르키는 문자열을 출력
printf("menu?");
scanf("%d",&menu);
if(menu == 0) // menu를 입력받은 다음 탈출 루프조건 검사
break;
else if (menu > 0 && men <sz_menu[menu]);
printf("%s menu choiced \n\n", str_menu[menu]);
}
}
댓글
댓글 쓰기