*문자열
문자열은 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 문자열 비교
*문자열들의 저장
여러개의 단어들을 포인터를 이용하여 아래 그림과 같이 저장해보자.
하나의 단어자체가 문자열로 저장됨
하나의 배열의 각 칸에 단어가 들어간다
그 단어는 배열로 구성되 있다.
입력받은 마지막 값이 모든 배열에 저장된다.
char
*words[100];
int
n=0; // number of strings
char
buffer[BUFFER_SIZE];
while(n<4 amp="" buffer="" eof="" p="" s="" scanf="">
4>
words[n]
= buffer;
// 문제는 이 문장이다.
// 처음 입력받은 단어가 지워짐
// words[n]=strcpy(?,buffer);
// strcpy 매개변수가 두개 필요함으로 새로 받을곳을 찾아줘야한다.
// words[n]=strdupy(buffer);
// 표준함수는 아니나 이렇게 사용이 가능함.
// 복제본을 만들어서 word[n]에 저장해줌
n++;
}
for
(int i =0; i < 4; i++)
printf("%s\n",words[i]);
*문자열 복사: strdup
char *
strdup(char *s)
{
char *p;
p =(char *)malloc(strlen(s)+1);
if(p !=NULL)
strcpy(p,s);
return p;
}
*파일로부터 읽기
include
void main(){
file * fp =fopen("input.txt","r");
// 파일의
입출력을 위해서는 fopne을 이용해서 열어야한다.
// 오픈모드 r 은
읽기만한다는것이다.
// fp 파일
포인터에 넣는다.
char buffer[100];
while(fscanf(fp, "%s", buffer) != EOF)
// input.txt에서
읽어온 파일로부터 문자열을 하나씩 읽어서
// 출력해주는것이다.
printf("%s', buffer);
fclose(fp);
// 볼일이
끝나면 항상 닫아줘야한다.
}
*파일 읽고 쓰기
include
void main(){
file * in_fp =fopen("input.txt","r");
file * out_fp =fopen("output.txt","w");
char buffer[100];
while(fscanf(in_fs, "%s", buffer) != EOF)
//fscnaf 파일로부터
읽을때 사용한다.
fsprintf(out_fp,"%s", buffer);
fclose(in_fp);
fclose(out_fp);
}
댓글 없음:
댓글 쓰기