일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Backtracking
- 백준 숨바꼭질5
- 조합론
- 위상정렬
- 소트 게임
- DFS
- LIS
- 투포인터
- BFS
- c언어
- 조합
- 백트래킹
- 인덱스 트리
- C++ 17071
- C++1167
- 순열
- 가장 긴 증가하는 부분 수열
- 백준 17071
- C++ 1918
- C++
- DP
- C++1967
- strtok
- 16933
- 알고리즘
- 다익스트라
- 백준
- 프로그래머스
- C++ 1937
- 문자열
- Today
- Total
블로그
[C++] char[] to string, string to char[] / char[], char* 의 차이점 본문
이젠 머릿속에 넣읍시다

에잇
char[] to string
생성자 사용
char str_char[10] = "lemonade";
string str(str_char);
또는
string str="";
str=str_char;
해주면 대입연산자가 알아서 str_char의 주소값부터 시작해 '\0'까지 읽어들여 string으로 만들어 주는 형식인가보다
string to char[]
string str="lemonade";
char str_char[10] ;
strcpy(str_char, str.c_str());
string에 .c_str()만 해주고 나서 바로 할당해줄 수 없나? 하겠지만 그러면 const char* 로 받아야 한다 (수정 불가능) (으악)
const char* str_char = str.c_str();
그래서 char[]를 먼저 생성해준 후 strcpy하는 방법을 선택한다~

연습문제로 좋은문제 - 백준 1181번 단어정렬
https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
참고
https://ddingji.tistory.com/106
[C++] 1181: 단어 정렬
solved.ac에서 class3 필수문제들 다시 풀어보자! 하다가 발견한 문제인데 C++을 쓰면서 scanf/printf를 사용하는 나같은 사람에게는 조금 까다로울 수 있는 문제라서 다시 풀어봤다 이 문제를 푸는 방법
ddingji.tistory.com
char[] <-> char* 차이점
char[]: char(1바이트) 형의 배열
- 배열의 원소에 접근 및 수정 가능
char *: 문자열 포인터 변수.
- 주소값을 이용해서는 접근 가능하지만 (printf(%s, str + 2) -> 포인터변수가 가리키는 주소에서부터 2바이트 떨어진 곳에서 시작해서 '\0'가 있는 곳까지 읽음)
- 쓰기가 불가능하다
- =============> 왜냐?! 이유: https://ddingji.tistory.com/94
메모리 영역 - 고정/가변 영역
DATA영역 .rodata: READ ONLY 이며 초기화 됨(고정) ex) const => 선언과 동시에 초기화를 해줘야 하며 READ ONLY로 값은 바꿀 수 없음 const ptr* = "abced" 라면 "abcde"가 .rodata영역에 있는거임! ptr은 위치한 곳에
ddingji.tistory.com
- (.rodata 영역에 할당되니까 READ ONLY 이다)
- char[]과 같이 접근이 불가능하다 (printf(%s, str[2]))
- -> 어쩌구[] 와 같은 접근은 어쩌구가 어떤 자료형으로 선언되어있는지를 읽어온 후에 해당 자료형의 바이트만큼 점프해주는거기 때문에 포인터 변수는 해당안됨
- 문자열의 크기를 명시해서 선언해줄 필요 없으니 편리하고 메모리적으로도 굳
- char[]도 char str[] = "abc"같이 되긴 하지만 char str[]; str="abc"는 안되므로..
'CS' 카테고리의 다른 글
[C, C++] C언어에서 참(true), 거짓(false) 구분 (0) | 2023.03.24 |
---|---|
메모리 영역 (0) | 2022.12.22 |
[OS] Linux IPC - Pipe, Shared memory, Message queue (0) | 2022.12.21 |
[DB] PL/SQL 정리 (0) | 2022.12.15 |
[DB] 정규화 - 함수 종속성 및 정규형 (종속성 규칙, 제 N정규형) (0) | 2022.12.15 |