배열과 문자열 13:54초 출력결과 문의
안녕하세요 선생님!
배열과 문자열 부분 문의가 있어 질문드립니다.
strlen함수를 사용하여 문자 하나씩 출력 부분인데요.
char str[] = "Hello, World!" ; // 문자열 선언 후
//5. strlen 함수를 사용하여 문자 하나씩 출력
printf("\n5. ");
int len = strlen(str);
for(int i = 0; i < len; i++) {
printf("%c", str[i]);
}
}
제가 풀면
5. Hello, World
인 것 같은데 이해가 안된 부분이 있는지하여 문의드려요.
H e l l o , W o r l d !
0 1 2 3 4 5 6 7 8 9 10 11 12 (*6은 띄어쓰기)
str len = 12 이라면
for(int i = 0; i < len; i++) {
for(int i = 0; i <12; i++) { 이 되고, i=11까지만 반복된다면
5번 예제의 출력값은
Hello, World
가 되는 것 같은데 문자열 뒤 첫번째 null 값까지 len 함수가 적용되는지 궁금하여 문의드립니다.
답변 1
2
안녕하세요, Hello, World! 의 길이는 13입니다.
H 1
e 2
l 3
l 4
o 5
, 6
7
W 8
o 9
r 10
l 11
d 12
! 13
0부터 세셨다는 말씀은 인덱스로 접근했다는 것인데, 인덱스의 경우 0부터 시작하니 맨 마지막이 12 인덱스가 맞습니다. 13 이전까지만 true니까 12까지가 나오면서 전체를 출력하겠죠.
한 가지 더 말씀드리자면,
strlen은 순수 문자열의 길이만 재고, sizeof는 사이즈까지재서 '\0'까지 포함한 크기가 나옵니다.
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
int length = strlen(str);
int size = sizeof(str);
printf("%d, ", length);
printf("%d ", size);
return 0;
}이 경우에는 출력값이 13, 14로 나옵니다.
혹시나 문제가 다른 함수로 나올 수 있으니 알아두시면 좋겠습니다.
만약 반복문으로 %c로 출력하면서 '\0'을 만나기 전까지 세라고 하면, 문자열 길이인 13을 사용해야합니다.
NULL을 만나면 바로 그 즉시 false가 되어서 반복문 아래를 수행하지 않기 때문입니다.
감사합니다.
서브넷 마스크
0
8
1
모의고사 1회 계산문제 2개 맞았는데
0
18
1
업캐스팅 문제 예시 4번 부모 호출
0
24
1
모의고사 자료 해설이 너무 불친절하네요.
0
55
2
부모의 생성자 출력 관련
0
23
2
이론파트 재탕문제
0
23
0
누락코드
0
24
1
다차원 배열 포인터 질문있습니다
0
42
3
이론 파트 재탕
0
39
1
모의고사 5회
0
36
1
12분 10초 func(values, 0, 1)을 넣을 때
0
38
1
모의고사 1회 4번 문제와 관련한 질문이 있습니다.
0
43
2
재탕문제
0
57
1
재탕문제
0
38
0
파이썬 추가 코드
0
54
1
배열 포인터 출력 표시
0
54
2
포인터 증감 또는 값 증감
0
54
2
배열 포인터 함수 관련
0
52
2
실기 이론 통합 요약본 버전
0
67
2
업캐스팅 3번 문제 예시
0
63
2
push pop 설명 되어있는 강의가 몇강인가요?
0
53
1
모의고사 파일오류
1
84
3
모의고사 다운
0
59
1
업캐스팅 원칙
0
71
2





