inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

(2027 대비!) 일주일만에 합격하는 정보처리기사 실기

2024년 2회 C언어 문자열 문의드립니다.

해결된 질문

134

chcpower

작성한 질문수 1

0

#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 이렇게 나오는게 맞을까요?

 

python java c 정보처리기사

답변 2

0

주말코딩

안녕하세요, 저 first ring의 경우에는 맨 마지막 for문 구문입니다. while 때문에 출력되는 것이 아닙니다.

 

실제 시험에서는 while문까지만 나왔고, 정말로 '\0' 문자가 중간에 들어갔는지를 확인하기 위해서 제가 일부러 for문에 i의 값을 끝까지 출력해본 것입니다.

 

지금 보시면 맨 마지막 for문의 출력의 경우 0부터 9까지 직접 지정해서 반복을 시행하여 출력하고 있습니다. 해당 부분을 while하고 착각하신 것 같습니다.

 

최초 설명시 while 부분만 본다면, 말씀해주신 것이 맞습니다. 그 부분 출력값보면 그렇게 작성되어 있을 겁니다.

0

인프런 AI 인턴

안녕하세요, 인프런 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