2024년 2회 C언어 문자열 문의드립니다.
#include <stdio.h>
void strcopy(char d[], const char s[]) {
int i = 0;
while (s[i] != '\0') {
d[i] = s[i];
i++;
}
d[i] = '\0';
}
int main() {
char str1[] = "first";
char str2[50] = "teststring";
int result = 0;
strcopy(str2, str1);
for (int i = 0; str2[i] != '\0'; i++) {
result += i;
}
printf("%d\n", result);
for (int i = 0; i < 10; i++) {
printf("%c", str2[i]);
}
}
출력값:
10
first ring
printf("%c", str2[i]); // first ring 이렇게 출력되었는데
while (s[i] != '\0') {
d[i] = s[i];
i++;
}
d[i] = '\0';
여기서 while타고 s[i]에 first 마지막인 t 가 들어가면 다음 배열이 들어가지않으니
d[i] = '\0'; 들어가고
firist\0 담기는게 아닌가해서 질문드립니다.
그래서 출력값이 first ring 이렇게 나오는게 맞을까요?
답변 2
0
안녕하세요, 저 first ring의 경우에는 맨 마지막 for문 구문입니다. while 때문에 출력되는 것이 아닙니다.
실제 시험에서는 while문까지만 나왔고, 정말로 '\0' 문자가 중간에 들어갔는지를 확인하기 위해서 제가 일부러 for문에 i의 값을 끝까지 출력해본 것입니다.
지금 보시면 맨 마지막 for문의 출력의 경우 0부터 9까지 직접 지정해서 반복을 시행하여 출력하고 있습니다. 해당 부분을 while하고 착각하신 것 같습니다.
최초 설명시 while 부분만 본다면, 말씀해주신 것이 맞습니다. 그 부분 출력값보면 그렇게 작성되어 있을 겁니다.
0
안녕하세요, 인프런 AI 인턴입니다. chcpower님.
질문하신 내용은 C언어에서의 문자열 복사 과정과 문자열 끝을 나타내는 \0 (널 문자)의 처리가 어떻게 이루어지는지를 이해하는 데 도움이 됩니다.
코드상에서 strcopy 함수를 사용하여 str2에 str1의 내용을 복사합니다. 이 과정에서 while 루프 내에서는 s[i]가 \0이 아닐 때까지 d[i]에 값을 복사하고, 복사가 끝난 뒤 d[i]에 \0을 추가합니다.
그래서 str2는 처음 5개의 문자가 first로 변경되고 그 뒤에는 기존 문자열인 "teststring"의 일부가 남아있게 됩니다. 즉, "first\0ring"이 되는 것이지요. 이 때문에 printf에서 %c로 str2의 10개 문자를 출력하면 first ring이 되는 것입니다. 이는 \0이 출력에서 보이지 않아 문자열이 끊긴 것처럼 보이기 때문입니다.
다음의 링크에서 관련된 용례를 참고해 보시면 도움이 더 될 것입니다.
관련 질문들
위 링크에서는 배열과 포인터, 그리고 문자열의 종료 조건인 \0와 관련된 다양한 측면을 설명하고 있습니다. 이를 통해 문자열의 동작 원리를 좀 더 명확히 이해하실 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
정처기 2026-3 실기 문의
0
84
2
정처기 실기 3회 컴싸 사용 여부
0
52
1
모의고사 1 회 2번문제 중
0
71
2
26-2 이론문제 재탕
1
53
1
26-2년도 코드문제
0
36
0
26-2 코드문제
0
43
1
15분 48초 질문
0
57
2
26-1년도 이론문제 재탕
0
64
1
26-1년도 코드문제 재탕
0
44
0
이론재탕만 눈치챘어도
0
72
1
25-3년도 이론문제 재탕
0
57
1
25-3년도 코드문제 재탕
0
41
0
출력값 문의
0
53
2
25-2 분기커버리지
0
47
0
25-2 이론 재탕
0
66
1
25-1 이론 재탕
0
53
1
서브넷 마스크
0
52
2
모의고사 1회 계산문제 2개 맞았는데
0
68
2
업캐스팅 문제 예시 4번 부모 호출
0
51
2
모의고사 자료 해설이 너무 불친절하네요.
0
95
2
부모의 생성자 출력 관련
0
48
2
24-3 이론파트 재탕문제
0
57
0
누락코드
0
45
1
다차원 배열 포인터 질문있습니다
0
71
3





