39분 25초
lower_str[strlen(original)]='\0';
upper_str[strlen(original)]='\0';
는 어떤 기능을 하는지 궁금합니다
문제 풀이는 다 이해가 되는데
저 식이 뭔지 잘 모르겠어서 질문드립니다
답변 2
1
문자열 가장 마지막에 null 문자를 넣는 겁니다.
길이는 양수 1부터 시작하는데 인덱스는 0부터 시작합니다.
그래서 null이 없는 문자의 길이를 잰 다음 그것을 역으로 인덱스로 활용하면 문자의 끝 바로 다음 인덱스를 가리킵니다.
그 부분은 문자가 없고, null 문자로 막아야 합니다. 그래서 저렇게 쓰는 것이고, 그 부분에 null을 할당해서 온전한 문자열을 만드는 것입니다.
0
original의 배열 같은 경우에는 맨 끝 문자의 그 다음을 조사해보면 \0이 들어가 있을 겁니다.
그런데 아래에 2개의 배열은 다릅니다.
지금 original에서 하나씩 빼서 일일이 넣고 있습니다.
자동으로 문자열 끝에 \0을 넣으려면 original처럼 임의의 배열을 선언하고 문자열 전체를 넣거나, 원래 있던 문자열을 온전히 복사해왔을 때 그렇습니다.
지금은 하나씩 글자를 빼서 넣고 있습니다. (반복문에서 그 할당이 일어나는 것이죠)
C언어는 일종의 바보 언어입니다. 자동으로 해주는 게 그렇게 많이 없습니다.
반복문만 보면, 도대체 어디가 문자열의 끝인지 알 수 있는 방법이 없습니다. 만약에 "반복문의 조건문에서 \0을 만났을 때, \0을 문자 다음에 삽입하라" 라는 지시문이 있으면 또 달라졌겠죠.
지금 반복문은 그저 문자를 하나씩 넣은 것 뿐이지, \0 문자를 명시적으로 넣으라고 한 적이 없습니다. 이 경우에는 우리가 일일이 넣어줘야 합니다.
비슷한 경우가 이겁니다.
char arr[2] = {"H","e"};
이 경우에도 null이 없습니다. 그래서 출력을 할 때 값이 제대로 나오지 않을 수 있습니다.
명확하게 하려면
char arr[] = "He";로 하거나
char arr[3] = {'H', 'e', '\0'}; 거나
char *str = "He"; 로 선언했어야 합니다.
char str[3] = "He";도 가능합니다.
정처기 2026-3 실기 문의
0
52
2
정처기 실기 3회 컴싸 사용 여부
0
34
1
모의고사 1 회 2번문제 중
0
47
2
26-2 이론문제 재탕
1
37
1
26-2년도 코드문제
0
27
0
26-2 코드문제
0
30
1
15분 48초 질문
0
40
2
26-1년도 이론문제 재탕
0
54
1
26-1년도 코드문제 재탕
0
41
0
이론재탕만 눈치챘어도
0
64
1
25-3년도 이론문제 재탕
0
50
1
25-3년도 코드문제 재탕
0
38
0
출력값 문의
0
42
2
25-2 분기커버리지
0
44
0
25-2 이론 재탕
0
57
1
25-1 이론 재탕
0
45
1
서브넷 마스크
0
48
2
모의고사 1회 계산문제 2개 맞았는데
0
64
2
업캐스팅 문제 예시 4번 부모 호출
0
48
2
모의고사 자료 해설이 너무 불친절하네요.
0
93
2
부모의 생성자 출력 관련
0
42
2
24-3 이론파트 재탕문제
0
56
0
누락코드
0
44
1
다차원 배열 포인터 질문있습니다
0
64
3





