2분 13초경 if (new_line)이 있어야 하는 이유
new_line = strchr(line, '\n'); 에서 line 문자열에서 '\n'을 찾으면
new_line에 포인터를 대입하고 못 찾으면 NULL 캐릭터를 대입하는데
포인터를 대입하고 *new_line = '\0';을 실행시키면 의도대로 되는 것이고
널 캐릭터를 대입하고 *new_line '\0'을 실행시켜도 문제는 생기지 않을거 같아서
if (new_line) 이라는 문장이 없어도 괜찮을 거 같은데 왜 있는 건가요?
널 캐릭터를 대입하고 *new_line '\0'을 실행시키면 문제가 되서 그런건가요?
아니면 다른 이유가 있는 건가요?
답변 1
2
안녕하세요, 질문&답변 도우미 Soobak 입니다.
if (new_line) 구문은 new_line 이 가리키는 값이 '유효한 메모리 주소인지' 를 검사합니다.strchr() 함수는 주어진 문자열에서 특정 문자를 찾고, 그 위치의 '포인터' 를 반환합니다.
만약, 해당 문자가 문자열 내에 없다면 NULL 을 반환합니다.
여기서, new_line 변수는 입력된 문자열 line 에서 개행 문자 '\n'를 찾은 위치를 가리키는 포인터입니다.
만약, line 에 개행 문자가 없다면, new_line 은 NULL 을 가지게 됩니다.
문제는, 만약 line 에 개행 문자가 없다면, new_line 은 NULL 을 가리키게 되고, NULL 포인터에 대한 역참조(즉, *new_line)은 정의되지 않은 행동을 발생시키게 됩니다.
그러므로, if (new_line) 구문은 new_line 이 실제로 유효한 주소를 가리키고 있는지 확인하여, 만약 NULL 이라면 *new_line = '\0'; 코드를 실행하지 않도록 합니다.
이는 NULL 포인터 역참조를 방지하여 프로그램이 안전하게 동작하도록 하는 중요한 안전 장치입니다.
이후의 강의에서도 각 섹션의 주제와 관련된 '안전 장치' 와 관련되어 자세하게 학습하시게 됩니다.
Export template 안됨
1
19
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
54
3
main 함수에서 왜 int만 선언이 되는걸까요
1
56
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
54
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
49
1
프로토타입과 함수간의 인자 불일치
1
73
2
12.12 헤더 관련 질문
1
60
2
Visual Studio Community 2026 사용 문의
1
137
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
61
2
getchar(), putchar()
1
93
3
강의자리ㅛ
1
80
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
113
2
소스파일안에 여러 파일
1
76
2
F5와 F7의 차이
1
76
2
c = TWO * (a+b); 에서 a와 b는?
1
58
2
; 세미콜론을 붙이는 기준에 문의
1
69
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
65
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
53
2
11.6 fit_str함수를 구현해 봤습니다.
1
53
2





