이번에는 C언어 에서 문자열에 대해 정리했습니다. 잘못된 부분이 있다면 지적해 주시면 바로 수정하겠습니다. 감사합니다.
문자열(string)
문자열은 char타입의 배열의 각 칸마다 문자 하나씩 저장됨
char str[6];
str[0] = 'h';
str[1] = 'e';
str[2] = 'l';
str[3] = 'l';
str[4] = 'o';
str[5] = '\0'; // null character('\0')는 문자열의 끝을 표시하는 역할을 한다.
// 즉 배열의 크기가 문자열의 길이보다 적어도 1만큼 길어야 한다.
C 언어는 문자열을 생성하는 편리한 방법을 제공
char str[] = "hello";
혹은
char *str = "hello"; // 하지만 이렇게 정의된 문자열은 수정이 불가능하다는 점에서 위의 두 방법과 다르다.
// 이것을 string literal이라고 부른다.
string.h 라이브러리 함수
string.h 라이브러리는 문자열을 다루는 다양한 함수를 제공
strcpy // 문자열 복사
strlen // 문자열의 길이
strcat // 문자열 합치기
strcmp // 문자열 비교
문자열들의 저장
여러개의 단어들을 포인터를 이용하여 저장해보자.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFER_SIZE 100
int main()
{
char* words[100];
int n = 0; // number of strings
char buffer[BUFFER_SIZE];
while (n < 4 && scanf("%s", buffer) != EOF) {
words[n] = strdup( buffer);
n++;
}
for (int i = 0; i < 4; i++) {
printf("%s\n", words[i]);
}
}
입력 : abcd bacd cabd dabc
출력 : abcd bacd cabd dabc
문자열 복사 : strdup
매개변수로 받은 하나의 문자열을 복제하여 반환한다.
char * strdup(char *s)
{
char *p;
p = (char *)malloc(strlen(s)+1);
if(p != NULL)
strcpy(p, s);
return p;
}
파일로부터 읽기
#include <stdio.h>
void main() {
FILE * fp = fopen("input.txt", "r");
char buffer[100];
while(fscanf(fp, "%s", buffer) != EOF)
printf("%s", buffer);
fclose(fp);
}
파일 읽고 쓰기
#include <stdio.h>
void main() {
FILE * in_fp = fopen("input.txt", "r");
FILE * out_fp = fopen("output.txt", "w");
char buffer[100];
while(fscanf(fp, "%s", buffer) != EOF)
fprintf(out_fp, "%s", buffer);
fclose(in_fp);
fclose(out_fp);
}