일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 봄봄 골드라인 4023G 탑볼세면대 화이트골드 카운타 도기볼 카페세면대
- [제이앤제나] 허리에 무리없는 신생아부터 역류방지쿠션_앨리펀블루 역류방지쿠션
- 샤오미 미밴드 7 스마트밴드
- 미네 리빙다이닝 6인 원목 코너형 식탁세트(소파형)
- 올리비아 스텐 세면대 세트
- 더블탭스 22SS 정글 01 셔츠 WTAPS JUNGLE 01 GREIGE M
- 톰브라운 명품톰브라운 23SS 더블페이스 니트 아우터형 포켓 셔츠 MJT291A 07545 415
- 네스파 다야몬드은박 후드티
- 위드리빙 대용량 옷 수납 방수 바구니
- 대림디움 대림바스플랜 PL-3070 탑카운터형 세면대/욕실/화장실/세면도기
- 리빙앤트리 펠리컨 박스 대
- 22FW 이바나 빈티지 체크 셔츠 더스트핑크 8054631
- 삼성 갤럭시워치5
- 굿아이템 양면오픈형 투명 접이식 리빙박스 폴딩박스 옷정리함 수납박스 펜트리수납함
- 러버메이드 벤티드 브루트(75L) 원형 컨테이너 리빙박스
- 남쪽나무 세면대 세면대 세트 (스마트거울) 벽걸이세면대 이케아세면대 세면기
- ipTIME 유무선공유기
- 22FW 로고 패치 포켓 체크 셔츠 2F000 03 M2359 F41
- list #pop #remove #del #append #insert #list형 #파이썬 파이썬 기본 문법 #파이썬 list
- 오토비 AZ100TR 32G 전후방 FHD 2채널 트럭 화물차 전용 블랙박스 보증기간 2년 20m케이블 포함 후방 적외선 방수 AS 2년보장
- 두칸 프릴 오버핏 후드티
- 내셔널지오그래픽 피너스 빅로고 라운드넥 긴팔 티셔츠 카본 블랙
- 1개
- 반스 올드스쿨 VN000D3HY28
- 8052 블랙라인 정사각 세면기
- ChatGPT
- 잡잡 NBR 요가매트 스탠다드 운동매트 10mm 퍼플
- 23SS 스트라이프 오버핏 셔츠 723033 V2L30 9066
- 코멧 접이식 투명 리빙박스 56L 대형 2개입
- 긍정
- Today
- Total
냥집사의 개발일지
C언어 - 메모리 동적 할당 (문자열) 본문
안녕하세요 오늘은 메모리 동적 할당 3탄 동적 할당을 이용하여
문자열 처리하는 법을 정리해보겠습니다.
이전 메모리 동적 할당 포스팅도 참고해주세요~
2022.09.20 - [C언어] - C언어 - 메모리 동적 할당 (malloc)
2022.09.21 - [C언어] - C언어 - 메모리 동적 할당 (calloc, realloc)
첫 번째 예제로 동적 할당(malloc)을 이용해 문자열을 출력해보겠습니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char temp[50];
char *str[4];
for(int i=0; i<4; i++){
printf("input string : ");
gets(temp);
str[i] = (char *)malloc(strlen(temp) + 1); // +1 for NULL
strcpy(str[i], temp);
}
for(int i=0; i<4; i++){
printf("str[%d] : %s\n",i,str[i]);
}
for(int i=0; i<4; i++){
free(str[i]);
}
return 0;
}
1. 문자열을 입력받고 문자열의 길이 +1 (NULL문자 포함해야 하기 때문)만큼 동적 할당해줍니다.
2. 포인터 배열의 요소(str[i])가 입력받은 문자열을 가리키게 합니다.
3. 아래 결과와 같이 포인터 변수 str[i]로 문자열에 접근할 수 있는 걸 확인했습니다.
두 번째 예제로 동적 할당(malloc)된 문자열을 함수로 출력해보겠습니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void print_str(char **ps){
while(*ps != NULL){
printf("%s\n",*ps);
ps++;
}
}
int main(){
char temp[50];
char *str[5];
for(int i=0; i<5; i++){
printf("input string : ");
gets(temp);
if(strcmp(temp,"end") == 0) break; //input "end" will exit the loop
str[i] = (char *)calloc(strlen(temp)+1,sizeof(char)); // +1 for NULL
strcpy(str[i], temp);
}
print_str(str);
for(int i=0; str[i]!=NULL; i++){
free(str[i]);
}
return 0;
}
1. 위의 예제와 같이 문자열을 입력받고 포인터 변수가 문자열을 가리키게 합니다.
2. 2개의 매개변수의 동일성을 확인하는 strcmp함수를 이용해 "end"를 문자열로 입력할 경우 for문을 빠져나가게 합니다.
3. print_str 함수는 포인터 배열을 매개변수로 받아 이차 포인터를 이용해 문자열에 접근합니다.
3.1. 포인터 변수가 가리키는 게 있다면 출력하고 없다면(NULL) 출력을 끝냅니다.
4. 아래 결과처럼 입력된 문자열을 출력하고 "end"를 입력하자 for문을 빠져나가 출력을 끝낸 것을 확인할 수 있습니다.
추가로 리눅스를 공부하다 보면 main함수에 매개변수가 있는 경우를 볼 수 있는데
위의 예제와 동일한 기능을 하는 것을 알 수 있습니다.
함수의 내부가 어떻게 만들어졌는지 유추해볼 수 있겠죠?
#include <stdio.h>
int main(int argc, char **argv){
printf("argc : %d\n",argc);
for(int i=0; i<argc; i++){
printf("argv[%d] : %s\n",i,argv[i]);
}
return 0;
}
1. argc는 매개변수의 수
2. argv는 매개변수를 담는 문자열 배열
3. 아래 결과와 같이 코드 실행 명령 포함 argc는 4, argv는 매개변수를 그대로 할당받았음을 확인할 수 있습니다.
오늘은 동적 할당을 이용하여 문자열 처리하는 법을 정리해보았습니다.
위의 예제들이 동적 할당을 이해하는데 도움이 되셨길 바라며 다음 포스팅에서 만나요~~
'C언어' 카테고리의 다른 글
C언어 - 구조체 (struct) (2) (0) | 2022.09.24 |
---|---|
C언어 - 구조체 (struct) (1) | 2022.09.23 |
C언어 - 메모리 동적 할당 (calloc, realloc) (0) | 2022.09.21 |
C언어 - 메모리 동적 할당 (malloc) (2) | 2022.09.20 |
C언어 - void 포인터 (void Pointer) (0) | 2022.09.19 |