출력결과값이 이상하네요
288
작성한 질문수 2
밑에 Han Jo 님과 같은 현상인거 같은데
31번째 줄
printf("%-30s %-30s\n", "My Things:", "Your Things:");
이 명령문이 있고 없고 const char* mythings[5] 배열이 들어가 있는 값이 차이가 있네요
값이
31번째 줄을 주석처리를 하면 const char* mythings[5] 의 주소배열이
이런식으로 들어가 있고
31번째 줄을 주석 처리를 안하면 const char* mythings[5] 의 주소배열의 값이
이런식으로 %c 와 %d가 중간중간 '\0'값과 바뀌어 들어가네요
단순한 오류라고 봐도 괜찮을까요? 아니면 제가 이해를 못한부분이 있는걸까요?
답변 2
5
안녕하세요! 질문자님과 비슷한 현상이 나오는 것을 제 컴퓨터에서도 확인했습니다.
이 const char* mythings[5] 의 원소(포인터)들이 가리키는 원본 문자열 리터럴들은 TEXT Segment 메모리 영역에 저장되어있습니다. 이 영역은 개발자가 절대 수정할 수 없는 영역이며 프로그램 코드들이 저장되는 영역이기도 해서 위와같이 프로그램의 일부 코드들도 문자열 리터럴들과 같은 영역에 섞여서 저장되어 있는 것을 확인할 수 있습니다.
오류라기보단 운영체제가 원본 문자열 리터럴들과 프로그램 코드들을 어떻게 TEXT Segment 메모리 영역에 저장하느냐에 따른 문제라고 보여집니다.
경우에 따라 위와같이 문자열 리터럴들이 저장된 곳 사이 사이에 운영체제가 프로그램 코드 일부(예를 들어 printf 호출 문장의 일부인 %c, %d 같은)를 저장해주기도 하나보다라고만 이해해주시면 될 것 같습니다. 운영체제가 알아서 저장하고 정리 해주는 방식일뿐입니다! Text Segment는 프로그램 코드들이 저장되다보니 전적으로 운영체제가 관리하는 메모리 영역이라고 생각하시면 됩니다.
yourthings배열과 달리 mythings는 포인터들이 각각 TEXT Segment 메모리 영역에 저장되어있는 문자열 리터럴 원본들을 가리키는 방식이기 때문에 문자열 리터럴들은 떨어져 있기도 하고 위와 같이 사이사이에 다른게 저장될 수도 있는 것 같아요. 꼭 연속적으로 저장되진 않는 것 같습니다. 문자열 리터럴들은 배열에 종속된 그런 것이 아니라 독립적이니까요! mythings배열의 포인터 원소들이 독립적으로 Text Segment 영역에 배치된 각각의 이 문자열 리터럴들을 가리킬 뿐이구요.
강의 후반부에서 교수님께서 포인터를 통해 배열의 범위를 벗어난곳까지 100개 이런식으로 출력하는 것은 가능은하나 권장하지 않는 방법이라고 말씀을 하셨는데 이런 케이스와 관련이 있을 수 있겠네요! 경우에 따라 이렇게 TEXT Segment 내에서 문자열 리터럴들 사이사이 간에 다른 코드의 일부가 저장될 수도 있으니 문자열 리터럴을 벗어난 공간으로부터 원하지 않는 %c %d 이런 것들이 출력될 수도 있으니까요.
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
50
3
main 함수에서 왜 int만 선언이 되는걸까요
1
54
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
54
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
48
1
프로토타입과 함수간의 인자 불일치
1
72
2
12.12 헤더 관련 질문
1
59
2
Visual Studio Community 2026 사용 문의
1
136
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
59
2
getchar(), putchar()
1
92
3
강의자리ㅛ
1
78
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
112
2
소스파일안에 여러 파일
1
75
2
F5와 F7의 차이
1
75
2
c = TWO * (a+b); 에서 a와 b는?
1
58
2
; 세미콜론을 붙이는 기준에 문의
1
68
1
Step over 기능 문의
1
53
2
2.6 강의 따옴표 출력 규칙 문의
1
74
2
int main 함수 관련 오류 문의
1
67
2
13.4 words[0]
0
60
2
11.7 함수를 구현해 봤습니다.
1
62
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
64
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
53
2
11.6 fit_str함수를 구현해 봤습니다.
1
53
2
11.5 코드 구현
1
67
2





