'A', '\n') - 단일 인용부호 사용"hello") - 이중 인용부호 사용\0) 저장char str1[10] = "abc"; // 크기 10, "abc" + 널 문자
char str2[] = "hello"; // 크기 자동 할당 (6개)
char str3[10] = ""; // 모든 원소를 널 문자로 초기화
⚠️ 중요 포인트:
<string.h>)| 함수 | 기능 | 사용법 |
|---|---|---|
strlen() | 문자열 길이 (널 문자 제외) | int len = strlen(str); |
strcpy() | 문자열 복사 | strcpy(dest, src); |
strcmp() | 문자열 비교 | int result = strcmp(s1, s2); |
strcat() | 문자열 연결 | strcat(dest, src); |
strchr() | 문자 검색 | char* p = strchr(str, 'c'); |
strstr() | 문자열 검색 | char* p = strstr(str, "sub"); |
strtok() | 토큰 분리 | char* token = strtok(str, "-"); |


char* p = "hello"; // 문자열 리터럴을 가리킴 (읽기 전용)
const char* cp = "world"; // 읽기 전용 포인터 (권장)
char str[] = "test";
char* p2 = str; // 수정 가능한 문자 배열을 가리킴
// 2차원 문자 배열 (수정 가능)
char books[3][20] = {"book1", "book2", "book3"};
// 문자열 포인터 배열 (읽기 전용)
const char* menu[] = {"File", "Edit", "View"};
strcpy(), strcat() 함수의 안전성 문제_CRT_SECURE_NO_WARNINGS 매크로 사용법strcpy_s(), strcat_s()// ❌ 잘못된 방법
if (str1 == str2) // 주소 비교
// ✅ 올바른 방법
if (strcmp(str1, str2) == 0) // 내용 비교
char str[] = "010-123-4567";
char* token = strtok(str, "-"); // 첫 번째 토큰
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, "-"); // 다음 토큰
}
다음 중 올바른 문자 배열 선언은?
char str[5] = "hello";char str[6] = "hello";char str[] = "hello";정답: 4번
#include <stdio.h>
#include <string.h>
int main(void) {
char str1[10] = "abc";
char str2[10] = "xyz";
char temp[10];
strcpy(temp, str1);
strcpy(str1, str2);
strcpy(str2, temp);
printf("str1: %s, str2: %s\n", str1, str2);
return 0;
}
출력 결과는?
정답: str1: xyz, str2: abc
char str[] = "Hello\nWorld";
int len = strlen(str);
변수 len의 값은?
정답: 11
\n은 하나의 문자로 취급char str[] = "programming";
char* p = str + 3;
printf("%c\n", *p);
printf("%s\n", p);
출력 결과는?
정답:
g
gramming
다음 함수를 완성하시오. 문자열에서 특정 문자의 개수를 세는 함수이다.
int count_char(const char* str, char ch) {
int count = 0;
// 여기를 완성하시오
return count;
}
정답:
int count_char(const char* str, char ch) {
int count = 0;
while (*str != '\0') {
if (*str == ch)
count++;
str++;
}
return count;
}
이메일 주소 "user@domain.com"에서 사용자명과 도메인을 분리하는 코드를 작성하시오.
정답:
#include <stdio.h>
#include <string.h>
int main(void) {
char email[] = "user@domain.com";
char* user = strtok(email, "@");
char* domain = strtok(NULL, "@");
printf("사용자명: %s\n", user);
printf("도메인: %s\n", domain);
return 0;
}
strcmp() 함수의 반환값 (0: 같음, 양수: 첫 번째가 큰 경우, 음수: 두 번째가 큰 경우)== 대신 strcmp() 사용strtok() 사용 후 원본 문자열 변경됨 주의사용자로부터 문장을 입력받아 단어의 개수를 세는 프로그램을 작성하시오.
(단어는 공백으로 구분됨)
해답:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int count_words(const char* sentence) {
int count = 0;
int in_word = 0;
while (*sentence) {
if (isspace(*sentence)) {
in_word = 0;
} else if (!in_word) {
in_word = 1;
count++;
}
sentence++;
}
return count;
}
int main(void) {
char sentence[100];
printf("문장을 입력하세요: ");
fgets(sentence, sizeof(sentence), stdin);
printf("단어 개수: %d\n", count_words(sentence));
return 0;
}