문자열 초기화
#include <stdio.h>
int main()
{
int i;
char str[4];
str[0]='a';
str[1]='b';
str[2]='c';
str[3]='\0';
i=0;
while(str[i]!='\0'){
printf("%c",str[i]);
i++;
}
return 0;
}
참고사항
A : 변수 이름
'A' : 문자 A, 하나의 문자, 아스키코드
"A" : 문자 A만으로 이루어진 문자열 , 'A'와는 다르다. (문자열 끝에 NULL문자가 추가된다.)
여러가지 초기화 방법
char str[4]={'a','b','c','\0'};
char str[4]="abc";
두가지 방법 모두 사용가능하다.
char str[4]="";
NULL문자로 초기화 하는 방법
char str[]="abc"; //배열의 크기는 4가 된다.
배열의 크기를 지정하지 않으면 컴파일러가 자동으로 배열의 크기를 맞춰 설정한다.
문자열 출력
i=0;
while(str[i]!='\0'){
printf("%c",str[i]);
i++;
}
printf("%s",str);
아래 방법이 훨씬 편하다.
다른 문자열로 하나의 문자열에 저장된 문자를 복사할 때에는 첫번째방식처럼 반복문을 사용하여 각각 복사한다.
for(int i=0; str[i]!='\0';i++)
dst[i]=str[i];
dst[i]='\0'; //마지막에 반드시 NULL문자를 넣어준다.
문자열 길이
i=0;
while(str[i]!='\0'){
printf("%c",str[i]);
i++;
}
printf("%d",i);
NULL문자가 생기기 전까지의 마지막 인덱스 넘버인 i를 출력하면 문자열의 길이를 세지 않고도 알 수 있다.
문자열 상수와 포인터
문자열 상수는 "HelloWorld"와 같이 프로그램 소스 안에 포함된 문자열을 의미한다.
문자열 상수는 텍스트 세그먼트라는 메모리 영역에 저장되고, 텍스트 세그먼트는 읽기만 가능하고 변경할 수 없는 메모리 영역이다.
char *p="HelloWorld";
먼저 포인터 변수가 생성되고, 모든 변수는 데이터 세그먼트에 저장되므로 포인터 변수 p도 데이터 세그먼트에 생성된다.
따라서 위 문장은 문자열 상수 "HelloWorld"가 저장된 주소가 포인터 변수 p에 저장되는 것이다.
문자열 상수가 텍스트 세그먼트에 저장되므로 문자열 상수를 변경할 수 없다.
다음과 같이는 변경가능하다.
char *p="HelloWorld";
p="Goodbye";
포인터 변수 p는 데이터 세그먼트에 있으므로 값을 변경할 수 있다.
텍스트 세그먼트는 값을 읽기만하고 변경할수는 없는 메모리 영역이다.
그에반해 데이터 세그먼트는 값을 변경할 수 있는 메모리 영역이다.
char p[]="HelloWorld";
strcpy(p,"Goodbye");
문자열을 포인터 변수 대신에 배열에 저장하면 p는 배열이 되고 데이터 세그먼트에 배열이 저장되므로 값을 변경할수있다.
문자열을 포인터 변수를 이용해 여러개를 동시에 저장하려면 문자형 포인터 배열을 만들어 다음과 같이 사용하면 된다.
char *p[10]={"apple","pear","orange","banana"};
for(int i=0; i<4; i++){
printf("%s \n",p[i]); //출력
}
'C' 카테고리의 다른 글
문자열 입출력 라이브러리 (0) | 2024.06.25 |
---|---|
문자 입출력 라이브러리 (0) | 2024.06.25 |
날짜 구현 (0) | 2024.06.23 |
동적 메모리 할당 (0) | 2024.06.21 |
백준 10818번 최대,최소 문제에서의 VLA와 동적할당 이슈 (1) | 2024.06.20 |