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";도 가능합니다.
필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)
0
30
2
26년 1회 실기 해설 강의
0
48
2
53번 4-1 자료 오류 있는 것 같습니다.
0
67
2
7번문제
0
56
2
C언어 변형문제 9번문제 Pdf 수정요청
0
44
2
메서드 오버드라드
0
44
2
실수
0
43
1
공부 우선순위 우선강의 알려주세요
0
82
1
생성자 호출순서 강의 10번 문제 30분대 질문입니다
0
44
2
25년 2회 기출 5:40 질문입니다.
0
37
2
C언어 출제변형 6번 문제
0
48
2
c언어 출제변형 강의 질문
0
28
2
28:40
0
32
2
C : 언어 배열과 문자열 수업자료
0
26
2
파이썬 리스트, 딕셔너리 질문
0
39
2
모의고사 관련 질문 건
1
66
3
정적 변수, 정적 메서드(static) v2
0
45
2
v1.2 와 v0.91 PDF
0
99
1
업캐스팅 (부모형태, 자식생성자)
0
49
2
정보처리산업기사 준비중입니다.
0
71
2
실기 D -6
0
103
2
(기출) 2024년 2회 기출문제 - 이론 포함 22분32초 질문입니다
0
55
3
업캐스팅 문제 풀면 업캐스팅이 상속과 문제풀 때 어떻게 해석해야할지 모르겠습니다.
0
57
2
강의파일 통합본
0
79
2





