inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C언어

12.2 객체와 식별자, lvalue와 rvalue

12.2 강의 질문있어요

457

몽글구름

작성한 질문수 3

1

안녕하세요.

const char* str = “Constant string”; // str is a modifiable lvalue.

str = “Second string”; // “Constant string” = “Second String” // imposible

str[0] = ‘A’; //Error

 

char str2[] = “String in an array”;

str2[0] = ‘A’; // OK

 

문자열 포인터 개념이 좀 어렵게 느껴지네요.

str[0] = ‘A’; 은 왜 안되는 건가요? 만약 포인터를 이용해서 0번째 배열에 원소를 저장하고 싶으면 어떻게 해야 하나요?

c

답변 1

4

Soobak

안녕하세요, 답변 도우미 Soobak 입니다.

const char* str = "Constant string"; 에서, 문자열 "Constant string" 은 메모리의 읽기 전용 메모리라는 곳에 저장됩니다. 이 곳은 컴파일 시점에 정적 으로 할당되며, 실행 시간 동안에는 변경할 수 없습니다.
따라서, str[0] = 'A' 와 같이 문자열의 내용을 바꾸려고하면 오류가 발생합니다.

char str2[] = "String in an array" 의 경우, 문자열 "String in an array" 은 스택 이라고 불리는 메모리에 저장되고, 실행 시간 동안 변경될 수 있습니다.
따라서, str2[0] = 'A' 와 같이 문자열의 내용을 바꿀 수 있습니다.

만약, 질문자님이 의도하시는 것 처럼, 포인터를 이용해서 0 번째 배열에 원소를 변경하시려면, 포인터에 메모리를 동적으로 할당해주어, 힙 이라는 실행 시간 동안에도 수정 가능한 메모리 공간을 활용해야 합니다.

지금은 위와 같은 내용만 이해하시고 학습을 이어나가시길 추천드립니다.
같은 섹션의 이어지는 강의들인 강의 12.13 메모리 동적 할당 과 강의 12.17 동적 할당 메모리와 저장 공간 분류 를 학습하시고 나면 궁금하신 부분들에 대하여 완전히 이해가 가능하실 것 같습니다.

1

Byunghee Moon

Soobak님 안녕하세요.

질문에 대한 답변 잘 봤습니다.

그런데 str[0] = 'A'가 안 된다면 str = "Second string"은 왜 되는 건가요? const char* str 을 통해서 읽기 전용 메모리에 저장되었다는 것은 동일하지 않습니까?

이 질문에 대한 답 역시 12.13과 12.17 강의를 보면 얻을 수 있을까요?

0

Soobak

안녕하세요, 답변 도우미 Soobak 입니다.

 

차이를 이해하기 위해서는 C 언어에서 문자열이 어떻게 저장되고 관리되는지 알아야 합니다.

 

const char* str 로 선언된 문자열은 리터럴 문자열이며, 이는 컴파일 시점에 '읽기 전용 메모리' 영역에 저장됩니다.

이러한 문자열의 개별 문자를 변경하는 것은 '읽기 전용 메모리' 에 대한 수정을 시도하는 것이므로 허용되지 않습니다.

 

반면, str = "Second string" 은 str 포인터가 가리키는 주소를 변경하는 것입니다.
여기서, str 은 새로운 리터럴 문자열인 "Second string" 이 저장된 메모리 위치를 가리키게 됩니다.
이는 '읽기 전용 메모리' 영역의 내용 자체를 변경하는 것이 아니라, 단지 포인터 변수가 가리키는 주소를 변경하는 것이므로 허용됩니다.

 

말씀해주신 것처럼, 강의 12.13 과 12.17 을 수강하시면 보다 더 잘 이해가 되실 것 같습니다.

Export template 안됨

1

190

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

237

3

main 함수에서 왜 int만 선언이 되는걸까요

1

163

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

169

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

127

1

프로토타입과 함수간의 인자 불일치

1

144

2

12.12 헤더 관련 질문

1

129

2

Visual Studio Community 2026 사용 문의

1

269

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

118

2

getchar(), putchar()

1

161

3

강의자리ㅛ

1

134

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

184

2

소스파일안에 여러 파일

1

132

2

F5와 F7의 차이

1

168

2

c = TWO * (a+b); 에서 a와 b는?

1

118

2

; 세미콜론을 붙이는 기준에 문의

1

123

1

Step over 기능 문의

1

127

2

2.6 강의 따옴표 출력 규칙 문의

1

126

2

int main 함수 관련 오류 문의

1

131

2

13.4 words[0]

0

108

2

11.7 함수를 구현해 봤습니다.

1

105

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

137

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

103

2

11.6 fit_str함수를 구현해 봤습니다.

1

104

2